微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/ruby/267001.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐