2012-06-08 75 views
1

我使用的是Firefox 11 + WebDriver 2.21.0/WebDriver 2.22.0(兩者都嘗試過)。在webdriver 2.21和mozilla11中處理警報

在我的情況下,當我點擊一個選項卡時,它會打開一個確認框並點擊OK它開始從服務器加載新選項卡。

所以我處理這種情況爲:

driver.findElement(By.id("myTab")).click(); 
driver.switchTo().alert().accept(); 

但點擊「MYTAB」後,它會等待窗口無限期地加載。所以它不是alert.accept(),瀏覽器等待接受確認對話框來加載新頁面,所以我最終處於死鎖狀態。

此代碼在Internet Explorer中運行良好。

請幫忙,如何處理情況?

回答

0

先生,您可能在Selenium WebDriver中發現了一個錯誤(或至少是不一致)。

看看here以前是否找到過,如果沒有這樣的bug,請隨時聯繫to file it。與此同時,您可以嘗試loading FirefoxDriver with "unstable" loading strategy然後(如果它不夠),可能driver.manage().timeouts().pageLoadTimeout()(它只適用於Firefox與「不穩定」設置)。

作爲一種變通方法,您可以嘗試通過JavaScript點擊標籤 - 儘管我不知道它是否會或不會工作:

((JavascriptExecutor)driver).executeScript("document.getElementById('myTab').click()"); 


編輯:

作爲另一種解決方法(受Selenium RC啓發),您可以暫時禁用確認對話框...

// assuming your driver can handle JS ;) 
JavascriptExecutor js = (JavascriptExecutor)driver; 

// stores the original confirm() function and replaces it 
js.executeScript("window.originalConfirm = window.confirm;" 
     + "window.confirm = function(m) { return true; };"); 

driver.findElement(By.id("myTab")).click(); 
// it should not even fire the confirm and just proceed 

// get the confirm back 
js.executeScript("window.confirm = window.originalConfirm;"); 
+0

感謝您的回覆Slanec。我嘗試使用((JavascriptExecutor)驅動程序).executeScript(「arguments [0] .click()」,element);但它也以相同的方式等待。 – Akarsh

+0

當我嘗試使用driver.manage()。timeouts()。pageLoadTimeout()。即使在加載頁面後,systen仍無法檢測到頁面加載完成,它會在指定時間後繼續等待並超時。 – Akarsh

+0

我很抱歉聽到這個消息。那我猜這是一個錯誤。 –

相關問題