一尘不染

在selenium中使用隐式等待

selenium

我是初学者。我了解基本等待的内容,但是我对互联网上的不同教程如何放置并进行解释感到困惑。例如,在下面的代码中,将其放置在加载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")

阅读 346

收藏
2020-06-26

共1个答案

一尘不染

隐式等待

ImplicitWait按照该Java文档是指定的时间量 webdriver的 情况下,即在 驾驶员
的一个元素搜索时,如果不立即出现在应该等待HTML
DOM
中,术语 纳秒MICROSECONDS
MILLISECONDSSECONDSMINUTES ,尝试查找一个或多个元素(如果无法立即使用)时的 HOURS
DAYS 。默认设置为 0 ,表示driver 当找到用于查找一个或多个元素的指令时,搜索开始并且结果立即可用。

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

因此,我们介绍了 ImplicitWait 。通过引发 ImplicitWait驱动程序
将轮询DOM树,直到找到该元素达配置的时间(在抛出NoSuchElementException之前寻找一个或多个元素)。到那时,您一直在寻找的一个或多个元素可能在
HTML DOM中 可用。作为您的代码已经设置 ImplicitWait 为值 10 秒, 司机 将轮询 HTML DOM
10 秒。

  • Python

    driver.implicitly_wait(10)
    
  • Java

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
  • 点网

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

最后,一旦设置了 ImplicitWait,则[WebDriver实例(即 驱动程序)_将能够携带此配置直到其生命周期。但是,如果你需要改变的时候粗了
_webdriver的
情况下即 驾驶员等待 ,那么你可以按如下重新配置:

  • Python

    driver.implicitly_wait(5)
    
  • Java

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    
  • Point network

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

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

  • Python

    driver.implicitly_wait(0)
    
  • Java

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    
  • 点网

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

回答你的问题

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