ruby – 将隐含的等待和显式等待组合在一起导致意外的等待时间

前端之家收集整理的这篇文章主要介绍了ruby – 将隐含的等待和显式等待组合在一起导致意外的等待时间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的两个场景 –

1)先

@driver.manage.timeouts.implicit_wait = 30
@wait = Selenium::WebDriver::Wait.new(:timeout => 45) # Time greater than implicit
@wait.until {@driver.find_element(:tag_name => "body").text.include?("hey")}

这给驱动程序45秒搜索文本(这是预期的)

2)二

@driver.manage.timeouts.implicit_wait = 30
@wait = Selenium::WebDriver::Wait.new(:timeout => 5) # Time less than implicit
@wait.until {@driver.find_element(:tag_name => "body").text.include?("hey")}

现在给驱动程序30秒搜索文本(不是预期的)

有没有办法使硒等待只有明确的等待时间,而不是更大的两个?

注意 – 不声明隐含的等待时间不是一个选项,因为每次驱动程序无法找到某些东西,我不能让selenium挂起.

使用Selenium版本30,windows,ff

解决方法

不要混合隐式和显式等待.问题的一部分是,在WebDriver系统的“远程”端实现隐含的等待通常(但不一定是!).这意味着它们被“烘烤”到IEDriverServer.exe,chromedriver.exe,安装到匿名Firefox配置文件中的WebDriver Firefox扩展以及Java远程WebDriver服务器(selenium-server-standalone.jar).显式等待仅在“本地”语言绑定中实现.使用RemoteWebDriver时,事情变得复杂得多,因为您可以多次使用系统的本地和远程两面.

这是如何工作的:本地代码 – > Java远程服务器 – >远程服务器上的本地Java语言绑定 – > “远程”组件,如Firefox扩展,chromedriver.exe或IEDriverServer.exe.在网格情况下更复杂,因为两者之间可能会有其他跳.

因此,当您尝试混合隐式和显式等待时,您已经陷入“未定义的行为”.您可能能够弄清楚该行为的规则是什么,但是随着驱动程序的实现细节的变化,它们将会随之变化.所以不要这样做

如果您没有使用隐式等待,则不能找到元素时,您不应该遇到“挂起”.司机应该立即抛出一个NoSuchElement异常.

原文链接:https://www.f2er.com/ruby/267001.html

猜你在找的Ruby相关文章