2017-10-13 781 views
0

我使用Winium.Desktop自动执行我公司的桌面任务。第一步是做一个登录,它打开一个新窗口。下一步是填写一份表格,有时候新窗口并不重点。所以自动化继续在当前关注的窗口上(自动化的旧窗口)。 搜索各地的网络,我发现这个: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

你需要切换窗口,那么你可以在匹配条件...查看示例代码

//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 
        } 


      } 

希望这本书能解决你的问题

+0

它是用户登录的桌面程序。它不是一个网络浏览器。 – freitas

+0

oww我认为概念会一样 – zsbappa

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

这是临时性的,因为如果在没有打开其他窗口的情况下运行自动化,它就会起作用。