使用“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
答案 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