2017-10-13 83 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傳遞給第二個參數。

這是臨時性的,因爲如果在沒有打開其他窗口的情況下運行自動化,它就會起作用。