2017-07-23 43 views
1

所以我有一個硒webdriver登錄我的網站,並從那裏我點擊一個按鈕,打開第二個窗口。我用下面這段代碼切換到新窗口硒檢查一個窗口當前是否打開

String winParent = driver.getWindowHandle(); 

for (String winHandle : driver.getWindowHandles()) { 
     driver.switchTo().window(winHandle); 
} 

現在我運行一些自動化是第二窗口上。一旦完成,我將按下保存按鈕,這將關閉當前窗口。如果窗口沒有關閉,意味着我在頁面上有一些錯誤,我需要循環回去修復它。

driver.findElement(By.id("btnSave")).click(); 

    if (isAlive(driver) == false) { 
     //break and exit 
     System.out.println("cic" + name); 
     finalString = finalString + "cic: " + name; 
     break; 

    } 


    public Boolean isAlive(WebDriver driver) { 
    try { 
     driver.getCurrentUrl();//or driver.getTitle(); 
     return true; 
    } catch (Exception ex) { 
     return false; 
    } 
} 

的程序工作正常時,它捕獲錯誤和窗口不會關閉。但只要一切都清楚並且窗口關閉,它就會輸入上面的if語句並顯示此錯誤。

無法從渲染器接收消息。

我相信我沒有檢查窗口是否被正確關閉。

編輯:經過一些調試後,似乎一旦窗口關閉,程序就不能真正知道下一步該做什麼。 http://i.imgur.com/l8nsPPr.png

+0

可能此鏈接對您有幫助嗎? https://stackoverflow.com/questions/27616470/webdriver-how-to-check-if-browser-still-exists-or-still-open – SomeStudent

回答

0

我建議使用windowHandle。 您正在保存初始窗口String winParent = driver.getWindowHandle();

然後您切換到第二個窗口,它將有不同的句柄。 當您需要檢查第二個窗口是否仍然打開時,只需使用:

private boolean isNewWindowOpened(WebDriver driver, String parentWindowHandle) { 
    try { 
     return !driver.getWindowHandle().equals(parentWindowHandle); 
    } catch (Exception ex) { 
     driver.switchTo(parentWindowHandle); 
     return false; 
    } 
+0

我不得不將catch改爲'driver.switchTo()。window( parentWindowHandle);」但這不起作用,我通過調試器跟蹤了窗口,即使窗口關閉了。 driver.getWindowHandle()仍然指向那個關閉的窗口。 –