2013-04-11 110 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