2012-02-15 77 views
0

我正在使用watir-webdriver來驅動Web應用程序的測試運行。使用watir-webdriver等待js警報

有問題的頁面會響應輸入更改,其中帶有確認,隨後是頁面流失,然後是警報。

**更新**

我曾嘗試以下,但我得到了Selenium::WebDriver::Error::UnhandledAlertError啓動在確認塊。

require "watir-webdriver/extensions/alerts" 

b.alert do 
    b.confirm(true) do 
    b.checkbox(:index => 1).set 
    end 
end 

**結束時更新**

但是加入(後輸入變化)以下:

browser.driver.switch_to.alert.accept 

將消失,第一確認沒有問題... ...

不幸由於頁面流失嘗試相同的線路以消除以下警報提高

Selenium::WebDriver::Error::NoAlertPresentError 

由於警報尚未發生。

我的解決辦法是下面的方法添加到的Watir ::瀏覽器

def get_alert (timeout = 300) 
    Watir::Wait.until(timeout) { 
    begin 
     driver.switch_to.alert 
    rescue Selenium::WebDriver::Error::NoAlertPresentError 
    end 
    } 
end 

和運行所有警報通過

browser.get_alert 

處理是否有這樣做的更好/內置方式這個?

**更新**

我的一個有益的解決辦法是它可以讓我用較硬的處理警報程序上,而不是讀(或產生)b.alert/b.confirm內塊

**結束時更新**

由於提前, 阿瑟

回答

2

由於每dialogs頁面上的Watir-webdriver的網站 - >

require "watir-webdriver/extensions/alerts" 

browser.confirm(true) do 
    browser.button(:value => 'Confirm').click 
end #=> 'the confirm message' 

因此,在您的具體情況下,而不是調用browser.driver.switch_to.alert.acceptbrowser.get_alert您應該能夠調用上述。

希望這會有所幫助。

+0

注意,上面做的將是什麼導致出現警報中的代碼。上面給出的例子恰好來自rspec測試,它使用了一個測試HTML頁面,該頁面有一個值爲'Confirm'的按鈕,這會導致單擊時發生確認警報。這行代碼將不得不改變爲導致確認對話框的任何操作。 – 2012-04-17 06:10:09

+0

謝謝......但也許我應該明確表示我意識到對話框頁面,並嘗試過這種方法,但沒有成功。 正如我在我所提到的,我有一個確認,其次是一個頁面加載,然後是一個警報,導致更多的麻煩。我會更新它以使其更加清晰。 – Arth 2012-04-17 10:21:50

0

很難知道,如果這將無法訪問您的網頁嘗試它,但你有沒有考慮嘗試這樣的事情?

require "watir-webdriver/extensions/alerts" 

b.alert do 
    b.checkbox(:index => 1).set 
    browser.driver.switch_to.alert.accept 
    #possibly a wait here... 
end 
0

較新的Alerts API具有標準的等待方式,所以你現在可以做的:

browser.alert.when_present.ok