在selenium中使用隐式等待

2024-04-03

我是初学者。我理解等待的基本作用,但我对互联网上不同的教程如何放置和解释它感到困惑。例如,在下面的代码中,它被放置在加载 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")

隐式等待

隐式等待 http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits根据Java文档 http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html#implicitlyWait-long-java.util.concurrent.TimeUnit-是指定时间量网络驱动程序实例即driver如果元素没有立即出现在搜索中,则在搜索时应该等待HTML DOM https://www.w3schools.com/js/js_htmldom.asp按照纳秒, 微秒, 毫秒, SECONDS, MINUTES, HOURS or DAYS当尝试查找一个或多个元素(如果它们不能立即可用)时。默认设置是0这意味着driver当找到查找一个或多个元素的指令时,搜索开始并且结果立即可用。

在这种情况下,在重新加载网页之后,在立即搜索中可能会/可能不会找到一个或多个元素。所以你的自动化框架 https://stackoverflow.com/questions/52013692/what-is-test-automation-framework-in-selenium/52705196#52705196可能面临以下任何异常:

  • NoSuchElementException http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/NoSuchElementException.html
  • TimeoutException http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/TimeoutException.html
  • ElementNotVisibleException http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/ElementNotVisibleException.html
  • ElementNotSelectableException http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/ElementNotSelectableException.html

因此我们介绍隐式等待。通过诱导隐式等待 the driver将轮询DOM Tree https://javascript.info/dom-nodes直到在配置的时间内找到该元素,然后在抛出之前查找该元素没有这样的元素异常 http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/NoSuchElementException.html。到那时,您一直在寻找的一个或多个元素可能会在HTML DOM。正如在您的代码中您已经设置的那样隐式等待到一个值10秒,即driver将轮询HTML DOM for 10秒。

  • Python:

    driver.implicitly_wait(10)
    
  • Java:

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
  • DotNet:

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
    

最后,一旦你设置了隐式等待, the 网络驱动程序 https://stackoverflow.com/questions/48079120/what-is-the-difference-between-chromedriver-and-webdriver-in-selenium/48080871#48080871实例即driver能够携带此配置直至其使用寿命。但是如果你需要改变粗略的时间网络驱动程序实例即driver to wait然后您可以按如下方式重新配置它:

  • Python:

    driver.implicitly_wait(5)
    
  • Java:

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    
  • DotNet:

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
    

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

  • Python:

    driver.implicitly_wait(0)
    
  • Java:

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    
  • DotNet:

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
    

回答您的问题

  • ...等待网址... : No, 隐式等待对页面加载没有影响。
  • ...为了寻找元素... : Yes, 隐式等待将定义时间进程WebDriver实例将等待寻找一个或多个元素。
  • ...隐式等待一次...: 是的,需要配置隐式等待仅一次,并且在整个生命周期内适用网络驱动程序实例。
  • ...每个元素搜索...:是的,任何时候都适用findElement() or findElements()被调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在selenium中使用隐式等待 的相关文章

随机推荐