隐式等待
ImplicitWait 用于指定 WebDriver 实例,即 驱动程序 在搜索元素时应等待的时间量,如果它没有立即出现在 @987654322 中@ 就NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS、MINUTES、HOURS 或DAYS 而言,在尝试查找一个或多个元素(如果它们不是立即可用)时。默认设置为0,这意味着driver 当找到查找一个或多个元素的指令时,搜索开始并且结果立即可用。
在这种情况下,在重新加载网页后,一个或多个元素可能会/可能不会在立即搜索中找到。因此,您的 Automation Script 可能会遇到以下任何异常:
因此我们引入 ImplicitWait。通过引入ImplicitWait,驱动程序将轮询DOM Tree,直到在配置的时间内找到元素,然后在抛出NoSuchElementException之前寻找元素或元素.到那时,您一直在寻找的一个或多个元素可能在 HTML DOM 中可用。在您的代码中,您已经将 ImplicitWait 设置为 10 秒的值,驱动程序 将轮询 HTML DOM 10 秒。
最后,一旦你设置了 ImplicitWait,WebDriver 实例,即 driver 就可以承载这个配置了直到它的一生。但是,如果您需要更改 WebDriver 实例的粗略时间,即 driver 到 wait,那么您可以重新配置如下:
如果您想在任何时候取消 ImplicitWait,您可以按如下方式重新配置它:
您可以在Using implicit wait in selenium找到详细讨论
显式等待
ExplicitWait 是您为 WebDriver 实例定义、配置和实现的代码块,以等待满足特定条件,然后再继续执行下一行代码。有一些方法可以帮助我们实现 ExplicitWait,它只会在需要时等待。 WebDriverWait 结合 ExpectedCondition 是实现 ExplicitWait 的方式之一。
一个例子:
解释:
ExplicitWait 的这种实现在抛出 TimeoutException 之前最多等待 10 秒,或者如果它找到该元素,那么它将在 0 到 10 秒内返回。 WebDriverWait 默认每 500 毫秒调用一次ExpectedCondition,直到它成功返回。 ExpectedCondition 函数类型的成功返回值是 Boolean 值为 true 或非空对象。
预期条件:
在为Testing Web/Mobile Applications 自动化 Web 浏览器时,经常会遇到一些情况。 Java、C# 和 Python 绑定包含这些方便的方法,因此我们不必自己编写 ExpectedCondition 类或为它们创建自己的实用程序包。一些 Expected Conditions 是:
alertIsPresent()
elementToBeClickable(locator)
elementToBeSelected(WebElement)
frameToBeAvailableAndSwitchToIt(locator)
invisibilityOf(element)
这里你可以找到Expected Conditions支持的所有方法。
您可以在Replace implicit wait with explicit wait (selenium webdriver & java)找到详细讨论。
Note:请勿混用 implicit and explicit waits。这样做会导致 unpredictable wait times。例如,设置 10 秒的隐式等待和 15 秒的显式等待,可能会导致 20 秒后发生超时。