2

尝试使用“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
4

2 回答 2

0

当找不到元素时,该方法find_element会引发 a (请参阅doc)。该块不会停止异常,它只会在异常进一步传播之前执行块中的代码。所以永远不会到达结束之后的代码。NoShuchElementExceptionbegin ... ensure ... endensure

无论如何,我不明白你为什么要打电话$driver.quit和 next $driver.find_element(...)。似乎也wait没用,您可以使用由driver(请参阅隐式等待)管理的超时

于 2013-04-11T15:39:21.347 回答
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  
于 2013-04-11T15:44:08.457 回答