我的两个场景 –
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异常.