2015-12-29 53 views
1

我正在使用watir自動化網站測試,因爲服務器太忙併且彈跳很多,有時我得到"Element is no longer valid"異常。我可以通過以下方式處理異常嗎?

那麼下面的代碼工作嗎?

def click_button(what, how) 
begin 
    @browser.button(what=>how).click 
    rescue=>exception 
    if exception.eql? 'Element is no longer valid' 
    click_button(what, how) 
    else 
    fail_report("Unable to click, '#{exception}'") 
    end 
end 
end 

這裏fail_report是報告失敗步驟的另一種方法。我無法測試它,因爲該異常會在20-25次運行中提升一次。

幫助表示讚賞。

回答

1

Watir會在點擊之前立即失效時自動重新定位元素,因此您的代碼不太可能會改善任何內容。

  1. 確認你正在做require 'watir-webdriver'而不是require 'watir'
  2. 確認您使用的是最新版本的Watir-webdriver的,因爲我更新的代碼在今年年初,以改善陳舊元素的問題。
  3. 確認您沒有在您的代碼中的任何地方引用Watir.always_locate
  4. 自動重定位不適用於從集合創建的元素。如果您在使用集合創建元素時遇到問題,請告訴我們,您還可以做其他一些事情。
+0

我確實需要'watir-webdriver',而且我正在使用最新版本。我沒有引用'Watir.always_locate'。我的方法點擊了特定的元素,並且傳入了'button'唯一的參數標識符。 –

+0

因此,當DOM發生變化時,元素會變得過時。 Watir/Selenium元素存儲與DOM中特定位置關聯的對象引用。當它試圖與該元素進行交互時,但沒有看到它期望的位置時,它會拋出陳舊的元素異常。當您重新加載瀏覽器時,或任何時候從DOM動態刪除任何信息時,都會發生這種情況。 我很好奇看到堆棧跟蹤; 「元素不再有效」是IEDriver消息,而不是Selenium/Watir消息,所以如果它是一個陳舊元素問題,我想知道爲什麼它不像我期望的那樣被Ruby代碼處理。 – titusfortner

相關問題