为了账号安全,请及时绑定邮箱和手机立即绑定

将隐式等待和显式等待结合在一起会导致意外的等待时间

将隐式等待和显式等待结合在一起会导致意外的等待时间

繁星淼淼 2019-10-11 11:01:59
我的两种情况-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秒的时间来搜索文本(不期望)有没有办法让硒仅explicit等待等待时间,而不等待两者中的较大者?注-不声明隐式等待时间不是一种选择,因为每次驱动程序找不到任何东西时,我都无法让硒挂起。使用Selenium版本30,Windows,ff
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

不要混合使用隐式和显式等待。问题的部分原因是隐式等待通常(但可能并非总是如此!)在WebDriver系统的“远程”侧实现。这意味着它们被“嵌入”到IEDriverServer.exe,chromedriver.exe,安装在匿名Firefox配置文件中的WebDriver Firefox扩展以及Java远程WebDriver服务器(selenium-server-standalone.jar)。显式等待专门在“本地”语言绑定中实现。使用RemoteWebDriver时,事情变得更加复杂,因为您可能同时使用了系统的本地端和远程端。

这是这样的工作方式:本地代码-> Java远程服务器->远程服务器上的本地Java语言绑定->“远程”组件,例如Firefox扩展,chromedriver.exe或IEDriverServer.exe。在网格情况下,它甚至更加复杂,因为它们之间可能还有其他跃点。

因此,当您尝试混合使用隐式等待和显式等待时,就会迷失为“未定义行为”。您可能能够弄清楚该行为的规则是什么,但是随着驱动程序的实现细节的更改,它们可能会有所更改。所以不要这样做。

如果您不使用隐式等待,则在找不到元素时不应出现“挂起”现象。驱动程序应立即引发NoSuchElement异常。


查看完整回答
反对 回复 2019-10-11
?
翻阅古今

TA贡献1780条经验 获得超5个赞

最佳实践是在每次测试开始时都隐式设置Wait(),并使用WebDriverWait()等待元素或AJAX元素加载。


但是,隐式Wait()和WebDriverWait()在同一测试中不能很好地协同工作。在调用WebDriverWait之前,您必须使implicitlyWait()无效,因为implicitlyWait()还会设置“ driver.findElement()”等待时间。


每当您将WebDriverWait()与hiddenWait()一起使用时,已经设置了一些初始值时,请执行以下步骤-


隐式取消Wait()

执行WebDriverWait(),并返回元素

再次隐式重置Wait()

示例Java代码-


driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS); //nullify implicitlyWait() 


WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds); 

element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));


driver.manage().timeouts().implicitlyWait(DEFAULT_WAIT_4_PAGE, TimeUnit.SECONDS); 


查看完整回答
反对 回复 2019-10-11
  • 2 回答
  • 0 关注
  • 1192 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信