Python和Selenium:driver.implicitly_wait()和time.sleep()之间的区别

时间:2018-12-03 07:05:33

标签: python selenium selenium-webdriver sleep implicitwait

是的,我知道两者都用于等待指定的时间。

硒:

driver.implicitly_wait(10)

Python:

import time
time.sleep(10)

这两者之间有什么区别吗?

3 个答案:

答案 0 :(得分:1)

time.sleep(secs)

  

time.sleep(secs)在给定的秒数内暂停当前线程的执行。该参数可以是浮点数,以指示更精确的睡眠时间。实际的暂停时间可能少于请求的暂停时间,因为任何捕获到的信号都会在执行该信号的捕获例程后终止sleep()。另外,由于系统中其他活动的安排,暂停时间可能比请求的时间长任意数量。

您可以在How to sleep webdriver in python for milliseconds

中找到详细的讨论

implicitly_wait(time_to_wait)

implicitly_wait(time_to_wait)用于指定 WebDriver 实例(即 driver )在搜索元素时应等待的时间(如果元素不立即出现在列表中)。如果找不到一个或多个元素,则SECONDS的{​​{3}}个术语。默认设置为 0 ,这意味着driver会在找到一条或多条元素的指令时开始搜索并立即提供结果。

在这种情况下,在重新加载网页后,可能立即搜索到一个或多个元素。因此,您的自动化脚本可能会遇到以下任何异常:

因此,我们介绍 ImplicitWait 。通过引入 ImplicitWait driver 将轮询ElementNotInteractableException,直到找到该元素已配置的时间,然后在抛出{之前寻找一个或多个元素。 {3}}。到那时,您一直在寻找的一个或多个元素可以在 HTML DOM 中使用。就像在您的代码中一样,您已经将 ImplicitWait 设置为 10 秒,驱动程序将轮询 HTML DOM 10 秒。

您可以在DOM Tree

中找到详细的讨论

答案 1 :(得分:0)

  • time.sleep(10)将代码执行恰好暂停10秒。
  • driver.implicitly_wait(10)最多等待10秒以等待元素的存在。如果2秒钟后发现它,则将继续执行代码,而无需等待8秒钟以上。

答案 2 :(得分:0)

当我们在测试脚本中使用隐式等待时,它会全局声明,它将自动应用于该脚本中的所有元素,例如,如果您使用隐式等待,则它将自动应用于Java。 ->驱动程序。 manage()。timeouts()。implictwait(10,timeunit.seconds);。此代码将等待元素出现在DOM中,直到元素可见后,执行将继续。在暂停脚本执行期间停止。

在这种情况下,在thread.sleep(1000)中,脚本将保持1000ms,无论元素在dom处在500ms处可见,它将一直停留到1000 ms。

Thread.sleep()是一个静态等待,它将脚本持续时间保持固定的时间。隐式等待会导致脚本执行直到元素在DOM中可见。

希望这会有所帮助!