ruby selenium-webdriver等待元素“确保”不起作用

时间:2013-04-11 14:57:55

标签: ruby selenium-webdriver

使用“begin ..ensure”方法单击element1后,尝试等待element2出现在网页上。如果element2不存在,我想退出并记录错误。但是element2会在几秒钟内出现,但以下代码会确保阻止并使驱动程序退出。 不知道是什么问题。提前致谢:

$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

2 个答案:

答案 0 :(得分:0)

当无法找到元素时,方法find_element会引发NoShuchElementException(请参阅doc)。 begin ... ensure ... end块不会停止异常,它只会在异常进一步传播之前执行ensure块中的代码。所以从来没有达到结束后的代码。

无论如何,我不明白为什么要拨打$driver.quit和下一个$driver.find_element(...)。此外wait似乎无效,您可以使用由driver管理的超时(请参阅Implicit wait

答案 1 :(得分: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