2016-01-25 51 views
0

我已經爲腳本訪問的每個Web元素創建了一個方法,以避免由Selenium拋出的「StaleElementReferenceError」。這是怎樣的代碼看起來:Ruby無法捕捉Selenium :: WebDriver :: Error :: StaleElementReferenceError

 def reach_element(page,element) 
     begin 
     element.wait_until_present 
     rescue Selenium::WebDriver::Error::StaleElementReferenceError 
     puts '* retrying to reach element' 
     page.refresh 
     retry 
     end 
    end 

看來,StaleElementReferenceError被忽略,並且測試跟上這個錯誤而失敗。 我做錯了什麼?

更正:

這個錯誤不應該出現在所有爲它由紅寶石被救出。 主要原因是watir-webdriver gem的舊版本。如果你仍然遇到這個錯誤,一個簡單的寶石更新應該做的伎倆。

回答

1

去年,當你對watir-webdriver中的元素採取行動時,我們大多擺脫了陳舊的元素問題。這是代碼:https://github.com/watir/watir-webdriver/blob/master/lib/watir-webdriver/elements/element.rb#L597

當對元素採取操作但已過時時,它將使用提供的選擇器重新查找它。如果它不存在,它將失敗。

您是否看到您的元素在您找到它之間,但在它變得可見之前就已經陳舊了?這是我計劃修復的一個有趣的用例。如果這是你的問題,刷新頁面將迫使元素過時,這樣就會重複你的問題。刪除刷新,它應該繼續重新定位陳舊的元素,直到它存在。

如果這不是問題或不起作用,請提供您所看到的堆棧跟蹤。

+0

好吧,刷新頁面行從來沒有達到,所以這是涵蓋。另外,我剛剛看到我的watir-webdriver gem有點老了。我會更新它並重新運行腳本。我會回來更多更新。 –

+0

好吧,我誤解了,我不明白什麼是你的測試失敗。 :)如果它繼續失敗,請發佈堆棧跟蹤。 – titusfortner

+0

你好。是的,我提出了除了你解決方案之外的其他問題。我看到一個問題是代碼無法捕捉到這個硒錯誤。然後我意識到,在您評論之後,StaleElementReference錯誤可能是watir-webdriver gem舊版本的原因 - 我擁有0.8.0的一個:)。所以你確實幫了我。謝啦 :) –

相關問題