加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 21:44:36 所属栏目:百科 来源:网络整理
导读:我的两个场景 – 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秒搜
我的两个场景 –

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读