2013-04-11 57 views
2

嘗試使用「begin ..ensure」方法單擊element1後,等待元素2出現在網頁上。如果element2不在那裏,我想退出並記錄一個錯誤。但element2出現在幾秒鐘​​內,但下面的代碼將確保阻止並使驅動程序退出。 不知道是什麼問題。由於事先:ruby​​ selenium-webdriver等待元素「確保」不起作用

$driver.find_element(:id, "element1").click 
wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds 
begin 
    wait.until {$driver.find_element(:id, "element2")} 
ensure 
    #Logger login error to text error log file 
    $driver.quit #---------------------------> always goes to ensure and quits 
end 
$driver.find_element(:id, "element2").click -->> never gets here 

回答

0

方法find_element引發當元件無法找到一個NoShuchElementException(參見doc)。 begin ... ensure ... end塊不會停止該異常,它只會在異常進一步傳播之前執行ensure塊中的代碼。所以結束後的代碼永遠不會到達。

無論如何,我不明白你爲什麼要撥打$driver.quit和下一個$driver.find_element(...)。另外,wait好像沒用,你可以使用driver管理超時(見Implicit wait

0

你想用rescue而不是ensure

  • ensure總是運行。
  • rescue只運行發生異常時(如果未找到該元素,即只有退出)

嘗試:

begin 
    wait.until {$driver.find_element(:id, "element2")} 
rescue 
    #Logger login error to text error log file 
    $driver.quit #---------------------------> always goes to ensure and quits 
end 
+0

謝謝您的回答。在執行下一個陳述之前確保網頁上存在元素的最佳方法是什麼 – user2270832 2013-04-11 16:07:24

+0

Selenium-webdriver內置了等待方法。看看顯式和隱式的等待 - http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp – 2013-04-11 16:54:23