Hi Community members,
Today, we are back with the last KShare article in our Desktop Testing series, where we will show you how to can achieve up to 400x faster speed and time for Switching Desktop Windows (**0,075 second is our current record) using Custom Keyword.
400x Faster 
The result above was recorded in the usual working condition, with the below specs:
- OS: Windows 10 Pro
- RAM: 16.0 GB
- Opening the applications below
- 2 Explorer windows
- 5 Browser windows
- 1 Katalon Studio window
- 1 WinAppDriver window
- 1 Notepad++ window
- 1 AUT application window
- 1 Eclipse IDE window
How does it work under the hood?
The old approach
In the old keyword, Katalon will search for all <window/>
and <panel/>
elements in the whole element tree of all opening windows on your desktop. The more complex the element tree is and the more applications running on the desktop, the more time it will take.
The new approach
But things will be easier if we only search in the top-level windows and not the whole element tree, right?
And yes, we have tried it, and it ran a lot faster (~10 seconds, 3x faster). Using Appium to find only the top-level windows with the locator "/window|/panel"
.
The fastest way to locate an application window
t can now run a lot faster, but can we make it even faster?
So, we start thinking about the fastest method to locate a window. And the name WinAPI just came into mind. It is a core framework that is available on all Windows machines today. Written in C/C++, results in excellent performance.
Searching on the internet, we found these three WinAPI methods that could help us look for a desired window.
Implement some more logic. And voilà , we get the “400x faster-switching window keyword” that we have seen at the beginning of this article.
Title pattern matching & Other utilities
Another limitation of the old keyword is that it only supports searching for windows whose title contains some specific string. But not when we want to switch to some window with a more complex title pattern.
That is why we also developed some more keywords here that support finding windows with Regular Expressions or windows with title that exactly match a specific string.
/**
* Start single instance application
*/
CustomKeywords.'WindowsImprovedKeywords.startSingleInstanceApplicationWithTitle'(appPath, 'Login Stage')
CustomKeywords.'WindowsImprovedKeywords.startSingleInstanceApplicationWithTitleContains'(appPath, 'Login')
CustomKeywords.'WindowsImprovedKeywords.startSingleInstanceApplicationWithTitlePattern'(appPath, 'Login Sta.*')
/**
* Start a new application
*/
CustomKeywords.'WindowsImprovedKeywords.startApplicationWithTitle'(appPath, 'Login Stage')
CustomKeywords.'WindowsImprovedKeywords.startApplicationWithTitleContains'(appPath, 'Login')
CustomKeywords.'WindowsImprovedKeywords.startApplicationWithTitlePattern'(appPath, 'Login Sta.*')
/**
* Switch to the window with the title or Start an active application
*/
CustomKeywords.'WindowsImprovedKeywords.switchToWindowWithTitle'('Login Stage')
CustomKeywords.'WindowsImprovedKeywords.switchToWindowWithTitleContains'('Login')
CustomKeywords.'WindowsImprovedKeywords.switchToWindowWithTitlePattern'('Login Sta.*')
The Guideline for using the above keywords
- “Start single-instance application with title…” keywords
- Only keep one instance of the target application at a time.
- If the application has been started, switch to that application window instead of starting a new instance.
- “Start application with title…” keywords
- Start a new instance of the target application and switch to the window with the desired title
- “Switch to window with title…” keywords
- Start the appium driver to the desktop context (Root) and switch to the window with the desired title
- The tests will fail if the application has not been stated yet.
You can find the sample project here, including the keywords for an exciting exploration.
If you find this article helpful, then don’t forget to leave us a like or a heart
and share it with your colleagues and teammates.
To see more KShare article, simply navigate to our Product Insights category.