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异常.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...