我是初学者。我明白什么等待基本上做但我很困惑如何通过互联网的不同教程放置它并解释它。例如,在下面的代码中,它在加载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")
答案 0 :(得分:3)
ImplicitWait
用于指定 WebDriver 实例的时间,即驱动程序在搜索元素时应等待的时间如果它不会立即显示在NANOSECONDS
MICROSECONDS
,MILLISECONDS
,SECONDS
,MINUTES
,HOURS
,{{1}中尝试查找一个或多个元素时,如果它们不能立即可用,则为{}}或DAYS
。默认设置为 0 ,这意味着driver
在找到查找元素的指令时,搜索开始,结果立即可用。
在这种情况下,在重新加载网页之后,可能会立即搜索/找不到一个或多个元素。因此,Automation Script
可能面临以下任何例外:
因此我们引入了 ImplicitWait 。通过引入 ImplicitWait ,驱动程序将轮询ElementNotVisibleException
,直到找到元素已经配置的时间量,在投掷{之前查找元素或元素{3}}。到那时,您一直在寻找的元素可以在 HTML DOM 中使用。与您的代码一样,您已将 ImplicitWait 设置为 10 秒的值,驱动程序将轮询 HTML DOM 10 秒。
的Python :
driver.implicitly_wait(10)
爪哇:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
DOTNET的:
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
最后,设置 ImplicitWait
后, WebDriver
实例即 driver
能够携带这种配置直到它的生命周期。但是,如果您需要更改 WebDriver
实例的粗略时间,即 driver
更改为 wait
然后你可以按如下方式重新配置它:
的Python :
driver.implicitly_wait(5)
爪哇:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
DOTNET的:
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
如果您想在任何时候取消 ImplicitWait
,请按以下步骤重新配置:
的Python :
driver.implicitly_wait(0)
爪哇:
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
DOTNET的:
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
Wait for the URL
:不,ImplicitWait
对页面加载没有影响。 For finding the element
:是的,ImplicitWait
将定义WebDriver
实例等待查找元素的时间粗略。Implicit wait once
:是的,您只需要配置ImplicitWait
一次,并且它在WebDriver
实例的整个生命周期内都适用。Every element search
:是的,在调用findElement()
或findElements()
时适用。答案 1 :(得分:1)
是的,implicit_wait
是全球适用的。所以一旦你设置它应用于所有元素。
我不建议使用explicit wait
,除非您的申请太慢。您可以根据以下页面中的要求使用Canvas
或任何其他等待。
它是一个JAVADOC,但是python的实现应该是相同的。
答案 2 :(得分:1)
隐式等待适用于所有Web元素,其中显式等待仅适用于指定的元素。
显式等待更智能,并且在处理Ajax时确实使用完全,另一方面隐式等待通常用于处理应用程序同步问题。