当前位置: 首页 > 知识库问答 >
问题:

在隐式、显式和流畅等待的情况下,如果在超时前找到元素会发生什么?

臧兴学
2023-03-14

假设超时是 10 秒。

3秒内找到元素

在所有三种等待情况下,网络驱动程序的响应是什么

共有1个答案

洪俊能
2023-03-14

一般来说,不管您选择哪种方法,一旦找到元素,程序就会继续。

三种方法之间的区别是,驱动程序将在何时找到元素。

  1. Fluent等待和显式等待(Java)的区别在于,您可以使用Fluent等待设置轮询间隔并忽略异常。
    (但在python中,当使用WebDriver等待类时,这些设置是可选的。在大多数情况下,您可以将此类用作Fluent和显式实现的组合。见https://stackoverflow.com/a/25784321/8186183)
  2. 显式等待和隐式等待的区别在于隐式等待时间是一个全局设置选项。每次调用查找元素或其他预期条件时,它都会生效。

另请参阅非隐式、显式和Fluentware之间的区别

我只是用python做了一个比较这些方法的小例子(如果用Java实现有任何不同的结果,请告诉我)< br > * *我构建了一个空白页面和一段脚本,在3秒钟后生成一个id="new_elem "的块。* *我用PhantomJS做selenium驱动。

我想先介绍这些方法处理查找元素任务的时间。

Fluent wait, 1s interval: waited 3.076176 seconds
Fluent wait, 5s interval: waited 5.587320 seconds
Explicit wait, 10s wait time: waited 3.105178 seconds
Implicit wait, 10s wait time: waited 3.138179 seconds

1.1 流利等待 1 秒间隔

start = time.time()
driver.get('http://127.0.0.1:5000')
element = WebDriverWait(driver, 10, poll_frequency=1).until(EC.presence_of_element_located((By.ID, 'new_elem')))
print("Fluent wait, 1s interval: waited %f seconds" % (time.time()-start))

3 秒后,驱动程序找到了该元素。

1.2流畅等待,间隔5秒

start = time.time()
driver.get('http://127.0.0.1:5000')
element = WebDriverWait(driver, 10, poll_frequency=5).until(EC.presence_of_element_located((By.ID, 'new_elem')))
print("Fluent wait, 5s interval: waited %f seconds" % (time.time()-start))

驱动程序不会在元素显示后立即找到该元素,而是在 5 秒间隔后找到该元素。

2.具有10秒等待时间的显式等待

start = time.time()
driver.get('http://127.0.0.1:5000')
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'new_elem')))
print("Explicit wait, 10s wait time: waited %f seconds" % (time.time()-start))

默认情况下,WebDriverWait的轮询间隔为0.5秒。所以司机在3秒钟后就找到了元素。

3隐式等待,等待时间为10秒

start = time.time()
driver.implicitly_wait(10)
driver.get('http://127.0.0.1:5000')
element = driver.find_element_by_id('new_elem')
print("Implicit wait, 10s wait time: waited %f seconds" % (time.time()-start))

请注意,隐式等待时间是一个全局设置选项。一旦设置好,每当调用find_element方法时,它将在找到元素之前等待等待时间。但是一旦它找到目标,它将返回结果并且不再等待时间。
此外,您不能使用隐式等待设置轮询间隔。它将继续尝试以较短的时间间隔从DOM轮询某些元素。

 类似资料:
  • 问题内容: 我的两种情况- 1)首先 这使驱动程序有45秒的时间来搜索文本(这是预期的) 2)第二 现在这使驱动程序有 30秒的时间 来搜索文本(不需要) 有没有一种方法可以让selenium仅等待等待时间,而不等待两者中的较大者? 注意-不声明隐式等待时间不是一种选择,因为每次驱动程序无法找到东西时,我都无法让selenium挂起。 使用Selenium版本30,Windows,ff 问题答案:

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

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

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

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

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

  • 问题内容: 我是Selenium WebDriver的新手,正在尝试了解“等待”元素出现的正确方法。 我正在测试一个带有单选按钮答案的问题的页面。选择答案时,JavaScript可能启用/禁用页面上的某些问题。 问题似乎是Selenium的“单击速度太快”,而不是等待Javascript完成。我尝试用两种方式解决此问题- 显式等待解决了该问题。具体来说,这可以解决我的问题: 但是,我 宁愿 使用隐

  • 创建驱动程序时,我已将隐式等待设置为10秒。当我希望使用显式等待时,是否必须将隐式等待设置为0? 以下是一个示例: 我必须做webDriver.manage()。超时()。秒);还是没有必要?