2011-10-11 30 views
0

我正在爲我們的生產站點自動執行「添加員工」表單測試。當輸入一個id或一個電子郵件或一個已經存在的名稱時,彈出一個服務錯誤消息,顯示該員工不能註冊。 。儘管這個窗口打開後,測試通過:(我嘗試使用driver.switchTo()警報()函數在我的代碼事情是這樣的:沒有警報存在/未找到模式對話框 - WebDriver無法捕捉到JS錯誤

Alert alert=driver.switchTo().alert(); 
String text=alert.getText(); 
System.out.println(text); 

與Firefox 7 +硒的webdriver 2.8 0.0:

org.openqa.selenium.NoAlertPresentException: No alert is present (WARNING: The server did not provide any stacktrace information); duration or timeout: 2.11 seconds 
    Build info: version: '2.8.0', revision: '14056', time: '2011-10-06 12:41:48' 
    System info: os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.37.6-0.7-desktop', java.version: '1.6.0_26' 
    Driver info: driver.version: RemoteWebDriver 

有了Chrome +網絡驅動程序:

[1011/131949:ERROR:automation_json_requests.cc(59)] JSON request failed: GetAppModalDialogMessage 
    with error: No modal dialog is showing 

快照錯誤: When the employee already exists

問題:

很好,如果我沒有得到對話框的文字。這是唯一會出現的警報。所以,只要知道警報已經出現就能解決我的問題。但是,這兩個東西說,不存在任何警報/模態對話框:(

感謝

編輯:我也嘗試過這樣的:

Selenium selenium=new WebDriverBackedSelenium(driver,baseUrl); 
System.out.println(selenium.isAlertPresent()); 

這給出了錯誤的難道不是一個警告框。 ?它是不是一個模態對話框?如果它沒有任何這些東西,我該如何找到它的頁面?

回答

2

很多時候會發生什麼是Selenium代碼在瀏覽器呈現警報之前執行。我傾向於這樣做:

Alert getAlert() { 
    try { 
     Alert alert = driver.switchTo().alert(); 
     return alert; 
    } catch (NoAlertPresentException e) { 
     // no alert to dismiss, so return null 
     return null; 
    } 
} 

我並不認爲這是理想的,但我現在還不知道Selenium有更好的方法。我傾向於定期從我的測試中盲目地稱呼它,如果它返回警報,我會放棄它。如果您希望在應用程序中收到警報並希望在繼續之前將其解除,請將其包裝在一個while循環中。

0

我也遇到了與模型對話框相同的問題。

你要做的是找到ok buttion的xpath並繼續。

我已經做了同樣的事情,併成功地做到了。

找到webelement,並在webelement和點擊「確定」按鈕之間等待。

請勿使用任何警報,如driver.switchto.alert.accept();