当前位置: 首页 > 面试题库 >

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

江超英
2023-03-14
问题内容

我的两种情况-

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仅explicit等待等待时间,而不等待两者中的较大者?

注意-不声明隐式等待时间不是一种选择,因为每次驱动程序无法找到东西时,我都无法让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异常。



 类似资料:
  • 我如何用一个显式的替换这个隐式的等待呢? driver=新ChromeDriver(功能); driver.manage().DeleteAllCookies();

  • 驱动程序级别的隐式和显式等待之间有什么区别。哪一个是驱动级等待。如果我们在代码中提供隐式和显式等待。哪一个优先。

  • 问题内容: 我在用: 但是对于以下元素它仍然连续失败 我添加了等待代码: 隐式等待是否应该等到找到一个元素后再进行处理?如果我使用而不是我添加的代码,还会更好吗? 问题答案: TL; DR:始终使用显式等待。忘记隐式等待的存在。 以下是显式等待与隐式等待之间的区别的简要概述: 显式等待: 记录和定义的行为。 在硒的本地部分运行(以你的代码语言显示)。 可以在你能想到的任何条件下工作。 返回成功或超

  • 问题内容: 我想知道WebDriver等待超时和隐式等待超时之间的技术差异。 问题答案: 如文档中所述: 在内部设置将用于所有连续搜索的超时。如果找不到该元素,它将尝试在指定的时间内反复查找该元素。它仅执行此操作,不能强制执行其他任何操作- 它等待元素显示。 ,或者只是您用于特定搜索的一次计时器。它具有更大的可扩展性,意味着您可以将其设置为等待可能需要的任何条件。通常,您可以使用一些预构建的元素来

  • 我正在尝试自动化基于共享点的应用程序,它有时会很慢。在下面的示例中,我试图将密码输入包装成显式等待。目前,Selenium以快速运行测试,导致无法执行操作。 如何将密码部分包装成硒显式方式?

  • 问题内容: Selenium WebDriver中有隐式和显式等待。它们之间有什么区别? 请分享有关Selenium WebDriver的知识。请显示带有隐式和显式等待的实时示例。 问题答案: 检查以下链接: -通过轮询DOM来指示Web驱动程序等待一段时间。声明隐式等待后,它将在Web驱动程序实例的整个生命周期中都可用。默认情况下,该值将为0。如果设置了更长的默认值,则该行为将根据浏览器/驱动程