Winium.desktop - 处理新的桌面窗口

时间:2017-10-13 17:41:58

标签: java selenium automation

我正在使用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行

不确定我是否可以使用它,但上面的代码用于浏览器窗口,这不是我的情况。

我如何专注于新的程序窗口?

谢谢

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传递给第二个参数。

这是暂时的,因为它可以在没有打开其他窗口的情况下运行自动化。