隐式等待
隐式等待是一个配置的实现网络驱动程序实例即driver进行民意调查HTML DOM在一定的时间内(就NANOSECONDS
, MICROSECONDS
, MILLISECONDS
, SECONDS
, MINUTES
, HOURS
or DAYS
)当尝试查找一个或多个元素(如果它们不能立即可用)时。默认设置是0这意味着driver当找到查找一个或多个元素的指令时,搜索开始并且结果立即可用。
在这种情况下,在重新加载网页之后,在立即搜索中可能会/可能不会找到一个或多个元素。所以你的自动化框架可能面临以下任何异常:
NoSuchElementException
TimeoutException
ElementNotVisibleException
ElementNotSelectableException
因此你需要诱导隐式等待。通过介绍隐式等待 the driver将轮询DOM Tree在配置的时间内寻找一个或多个元素。到那时,您一直在寻找的一个或多个元素可能在 DOM 中可用。正如在您的代码中您已经设置的那样隐式等待到一个值10秒,即driver将轮询 DOM10秒。
最后,一旦你设置了隐式等待, the 网络驱动程序实例即driver能够携带此配置直至其使用寿命。但是如果你需要改变粗略的时间网络驱动程序实例即driver to wait然后您可以按如下方式重新配置它:
如果您在任何时候想要取消隐式等待您可以按如下方式重新配置它:
流畅等待
流畅等待是实施Wait我们可以通过该界面进行配置timeout and 轮询间隔在飞行中。一个实例流利等待可以定义为配置等待条件的最长时间以及必须检查条件的频率。用户还可以配置等待忽略特定类型的例外情况在等待一个元素时,例如没有这样的元素异常在页面上。
-
Usage:
// Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
显式等待
显式等待俗称WebDriver等待是一个专门的实现流利等待用户可以通过它来定义、配置和实施网络驱动程序实例等待满足特定条件,然后再继续下一行代码。有一些方法可以帮助我们实现显式等待只会根据需要等待。WebDriver等待和这个结合预期条件是其中之一显式等待可以实现。
一个例子:
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
.
.
.
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath")));
element.click();
解释:
此次实施显式等待在抛出之前等待最多 10 秒TimeoutException
或者如果找到该元素,它将在 0 到 10 秒内返回。WebDriver等待默认情况下调用预期状况每 500 毫秒一次,直到成功返回。成功的返回值预期状况函数类型是Boolean
true 值或非空对象。
预期条件:
在自动化 Web 浏览器时,经常会遇到一些情况测试网络/移动应用程序。 Java、C# 和 Python 绑定包含这些方便的方法,因此我们不必编写预期状况我们自己进行类或为他们创建我们自己的实用程序包。一些预期条件 are:
alertIsPresent()
elementToBeClickable(locator)
elementToBeSelected(WebElement)
frameToBeAvailableAndSwitchToIt(locator)
invisibilityOf(element)
您可以找到有关支持的所有方法预期条件 here.
这个特定的查询:
- 当搜索单个元素时,驱动程序将轮询 OM,直到找到该元素或配置的超时到期,然后再抛出
NoSuchElementException
.
- 当搜索多个元素时,驱动程序将轮询 DOM,直到找到至少一个元素或配置的超时已过期。
因此,根据第一种情况,驱动程序将等待只需3秒.