Find window handles by criteria
To improve automation performance and stability, window handles can be found by criteria, for example, a class, a title, etc. To narrow down the window search, the getWindowHandles method is used.
API
Set<String> windowHandles = Window.windowHandles("[CLASS:Notepad]");
The following window attributes are used for search:
parentPIDprocessNamecommandLineclassTitle/Regexp title
Examples
Class
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://web-harvest.sourceforge.net/schema/1.0/config" scriptlang="groovy">
<robotics-flow>
<robot driver="universal">
<script><![CDATA[
openAndFocus("notepad.exe", 1000, 100);
openAndFocus("notepad.exe", 1000, 100);
openAndFocus("notepad.exe", 1000, 100);
openAndFocus("mspaint.exe", 1000, 100);
openAndFocus("mspaint.exe", 1000, 100);
Set<String> handlesNotepad = Window.windowHandles("[CLASS:Notepad]");
assert handlesNotepad.size() == 3
Set<String> handlesPaint = Window.windowHandles("[CLASS:MSPaintApp]");
assert handlesPaint.size() == 2
]]></script>
</robot>
</robotics-flow>
<export include-original-data="false"/>
</config>
Parent PID
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://web-harvest.sourceforge.net/schema/1.0/config" scriptlang="groovy">
<robotics-flow>
<robot driver="universal">
<script></script>
</robot>
</robotics-flow>
<export include-original-data="false"/>
</config>
Performance metrics
Previous implementation
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://web-harvest.sourceforge.net/schema/1.0/config" scriptlang="groovy">
<robotics-flow>
<robot driver="universal">
<script><![CDATA[
timeouts(10 * 1000)
inDesktop(){
Set<String> handles = driver().getWindowHandles()
List<String> handlesFiltered = new ArrayList<String>()
for(String handle : handles){
try {
window(handle)
if (driver().getTitle() == "Untitled - Notepad") {
handlesFiltered.add(handle)
}
} catch (Exception e) {}
}
}
]]></script>
</robot>
</robotics-flow>
<export include-original-data="true"></export>
</config>
Current implementation
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://web-harvest.sourceforge.net/schema/1.0/config" scriptlang="groovy">
<robotics-flow>
<robot driver="universal">
<script></script>
</robot>
</robotics-flow>
<export include-original-data="true"></export>
</config>
Execution results
| Total windows | Filtered windows | Execution time previously (ms) | Execution time now (ms) | Speed growth |
|---|---|---|---|---|
| 8 | 3 | 2,952 | 161 | 18 |
| 16 | 3 | 5,936 | 164 | 36 |
