在selenium中使用隐式等待

Shi*_*hra 4 selenium selenium-chromedriver selenium-webdriver geckodriver implicitwait

我是初学者。我理解等待的基本作用,但我对互联网上不同的教程如何放置和解释它感到困惑。例如,在下面的代码中,它被放置在加载 URL 之前。那么,是否只是等待 URL 加载或查找元素或两者兼而有之?如果我在 try 块中使用隐式等待一次,它是否适用于我在代码中执行的每个元素搜索?

from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
Run Code Online (Sandbox Code Playgroud)

Deb*_*anB 9

隐式等待

根据Java 文档,ImplicitWait指定WebDriver实例的时间量,即如果元素没有立即出现在HTML DOM中,则驱动程序在搜索元素时应等待的时间量,如NANOSECONDSMICROSECONDSMILLISECONDSSECONDSMINUTES、如果尝试查找一个或多个元素(如果它们不能立即可用),则需要数小时数天的时间。默认设置为0,这意味着当找到一条或多个元素的指令时,将开始搜索并立即提供结果。driver

在这种情况下,在重新加载网页之后,在立即搜索中可能会/可能不会找到一个或多个元素。因此,您的自动化框架可能面临以下任何异常:

因此我们引入了ImplicitWait。通过引发ImplicitWait,驱动程序将轮询DOM 树,直到在配置的时间内找到该元素,然后在抛出 NoSuchElementException 之前查找该元素。到那时,您一直在寻找的一个或多个元素可能会在HTML DOM中可用。由于您已在代码中将ImplicitWait设置为10秒,因此驱动程序将轮询HTML DOM 10秒。

最后,一旦设置了 ImplicitWait WebDriver实例(即驱动程序)就能够在其生命周期内携带此配置。但是,如果您需要更改WebDriver实例(即驱动程序等待的粗略时间,那么您可以按如下方式重新配置它:

如果在任何时候您想取消它,ImplicitWait您可以按如下方式重新配置它:


回答您的问题

  • ...等待 URL...:不,ImplicitWait对页面加载没有影响。
  • ...用于查找元素...:是的,ImplicitWaitWebDriver将定义实例等待查找一个或多个元素的粗略时间。
  • ...隐式等待一次...:是的,您只需配置ImplicitWait一次,它适用于WebDriver实例的整个生命周期。
  • ...每个元素搜索... :是的,在调用findElement()或时适用。findElements()

  • 根据selenium [WebDriver文档](http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits),不可能重新配置隐式等待:“一旦设置,隐式等待将被设置为WebDriver 对象实例的生命周期。” (2认同)