2013-01-17 52 views
0

就搜索而言,我無法找到watir支持的瀏覽器的最新列表。使用「存在」時出現超時錯誤watir-webdriver方法

我剛將Firefox升級到版本18,同時還將其更新爲最新的watir-webdriver版本(使用gem update watir-webdriver)。

到目前爲止,我遇到了一個問題,我似乎無法找到解決方案。

當我嘗試檢查元素是否存在,可以說,通過使用$browser.a(:href, "#{$url}/admin/").exists?(該$url變量定義爲我的測試服務器的主URL,所以這不是問題。而且,即使我用替換變量實際地址,我仍然遇到同樣的問題),我總是得到一個超時錯誤,當元素不是存在。

當元素確實存在時,我將得到true的即時響應。所以超時問題只發生在元素不存在時。

所以我的問題是:

  1. 有沒有辦法讓.exists?方法的工作?
  2. 有沒有人知道像最新版本的Firefox(V。18)那樣的其他問題?
  3. 如果有人能指點我支持watir的瀏覽器的更新列表,我將不勝感激。最好是定期更新的列表。

P.S, 我沒看到有人發佈了關於該present?方法的問題,我有沒有它的想法的關聯,但儘管如此,我仍然沒有解決。我討厭降級到以前版本的ff。

多謝的人誰願意幫忙,

親切的問候, 阿薩夫。

+0

在堆棧跟蹤中出現錯誤的確切文本是什麼? 您安裝的Selenium-webdriver的版本是什麼? 當您使用Firefox以外的瀏覽器測試時,腳本是否會引發相同的超時錯誤? –

+0

其實安倍,你解決了我的問題。我只需要更新selenium-webdriver gem(這在我的愚蠢中,我忘了這麼做),一切似乎都在按照原樣運行。非常感謝! –

+0

很高興能幫到你! :) –

回答

0

我在這裏和那裏有這樣的問題,解決方案是捕捉異常並重新運行觸發此異常的代碼段。當然,我假設你的例外是由一些短暫的原因觸發的,可能是由於Watir的一個小故障。

簡單地說,你可以做這樣的:

begin 
    $browser.a(:href, "#{$url}/admin/").exists? 
rescue Timeout::Error 
    puts("Caught a TIMEOUT ERROR!") 
    sleep(1) 
    # Retry the sode that generates the esception. 
    retry 
end 

這是最簡單的形式。你也可以確保不鎖定自己在一個無限循環的做這樣的事情:

retries_left = 3 
begin 
    $browser.a(:href, "#{$url}/admin/").exists? 
rescue Timeout::Error 
    puts("Caught a TIMEOUT ERROR!") 

    # You may want to wait for a while before retrying. 
    sleep(1) 

    # Retry the code that generates the exception. 
    retries_left -= 1 
    retry if retries_left > 0 

    # No more retries left - time to bail out! Re-raise the exception. 
    raise 
end 

你可以提高這個有點抽象化這個異常處理代碼到接受塊的測試輔助方法,並用它在一個更清潔的方式,而不重複自己,如:

handle_transient_exceptions { 
    $browser.a(:href, "#{$url}/admin/").exists? 
} 

但這不是你問的。:)

提到你的第三個問題,我可以說watir-webdriver支持最新的Chrome,Firefox和IE9很好。我目前正在使用這些瀏覽器,但尚未發現任何阻止問題。

+0

謝謝你的建議。雖然即將與我一起重試,但遺憾的是,這並沒有解決問題。我正在尋找一種方法來避免更改我的代碼。上升硒webdriver寶石似乎解決了這個問題。再次感謝! –

相關問題