我正在使用Winium.Desktop为我的公司自动执行桌面任务。第一步是进行登录,然后打开一个新窗口。下一步是填写表格,有时新窗口不会集中。因此,自动化继续在当前关注的窗口(来自自动化的旧窗口)上。 在网上搜索我发现了这个:
1: String parentHandle = driver.getWindowHandle();
2: for (String handle: driver.getWindowHandles()) {
3: if (!parentHandle.equals(handle))
4: driver.switchTo().window(handle);
5: }
有一个例外: java.lang.ClassCastException:java.lang.Long无法强制转换为java.lang.String 在第2行
不确定我是否可以使用它,但上面的代码用于浏览器窗口,这不是我的情况。
我如何专注于新的程序窗口?
谢谢
答案 0 :(得分:0)
您需要切换窗口然后才能匹配条件...请参阅示例代码
//wait for few seconds for loading site
for (String windows : driver.getWindowHandles()) {
driver.switchTo().window(windows);
if (driver.getCurrentUrl().startsWith("xyz.com")) {
//Your Operation
}
if (driver.getCurrentUrl().startsWith("yzx.com")) {
//Your Operation
}
}
希望它能解决你的问题
答案 1 :(得分:0)
所以我想出了一个临时解决方案。
public static final <T> T nthElement(Iterable<T> data, int n){
int index = 0;
for(T element : data){
if(index == n){
return element;
}
index++;
}
return null;
}
public static void focusNewWindow() {
Object count = nthElement(driver.getWindowHandles(), 0);
driver.switchTo().window(count.toString());
}
每当我在自动化中调用此窗口时,它就成为窗口列表中的第一个元素(内部)。所以我创建了一个函数来返回一个基于索引的元素,并将0传递给第二个参数。
这是暂时的,因为它可以在没有打开其他窗口的情况下运行自动化。