java – 隐式vs显式vs流利等待
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 隐式vs显式vs流利等待,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3569字,纯文字阅读大概需要6分钟。
内容图文
![java – 隐式vs显式vs流利等待](/upload/InfoBanner/zyjiaocheng/710/1ea4eb2296264cf39157669f3b25ee78.jpg)
隐式,明确,流利等待有什么区别?
如果我们在隐式等待和10秒之前设置10秒,则在3秒内只有元素到达.
那个时候会发生什么?它将等待10秒或继续进行.
解决方法:
ImplicitWait
ImplicitWait是一个配置WebDriver实例的实现,即驱动程序在尝试查找一个或多个元素时轮询HTML DOM一段时间(NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS或DAYS的间隔)没有立即可用.默认设置为0表示驱动程序在找到查找元素的指令时,搜索开始,结果立即可用.
在这种情况下,在新加载网页之后,可能/可能在立即搜索中找不到元素.因此,您的自动化脚本可能面临以下任何异常:
> NoSuchElementException
> TimeoutException
> ElementNotVisibleException
> ElementNotSelectableException
因此我们介绍了ImplicitWait.通过引入ImplicitWait,驱动程序将轮询HTML DOM以查找配置的元素或元素.到那时,您一直在寻找的元素可能在HTML DOM中可用.在您的代码中,您已将ImplicitWait设置为10秒的值,驱动程序将轮询HTML DOM 10秒.
> Python:
driver.implicitly_wait(10)
> Java:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
最后,一旦设置了ImplicitWait,WebDriver实例即驱动程序就能够将此配置带到其生命周期.但是,如果您需要更改WebDriver实例的粗略时间,即驱动程序要等待,那么您可以按如下方式重新配置它:
> Python:
driver.implicitly_wait(5)
> Java:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
如果在任何时候您想要使ImplicitWait无效,您可以按如下方式重新配置它:
> Python:
driver.implicitly_wait(0)
> Java:
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
流利的等待
Fluent Wait是Wait接口的实现,通过它我们可以动态配置超时和轮询间隔.可以定义FluentWait的实例来配置等待条件的最大时间量以及必须检查条件的频率.用户还可以配置等待以在等待元素时忽略特定类型的异常,例如页面上的NoSuchElementExceptions.
>用法
// 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"));
}
});
ExplicitWait
ExplicitWait通常称为WebDriverWait,是FluentWait的专用实现,用户可以通过该实现为WebDriver实例定义,配置和实现等待某个条件得到满足,然后再继续下一行代码.有一些方法可以帮助我们实现只在需要时才会等待的ExplicitWait. WebDriverWait与ExpectedCondition结合使用是ExplicitWait可以实现的方式之一.
一个例子:
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();
说明:
ExplicitWait的这个实现在抛出TimeoutException之前等待最多10秒,或者如果它找到该元素,那么它将在0到10秒内返回.默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到它成功返回. ExpectedCondition函数类型的成功返回值是布尔值true或非null对象.
预期条件:
在自动化用于测试Web /移动应用程序的Web浏览器时,常常遇到一些情况. Java,C#和Python绑定包括那些方便的方法,因此我们不必自己编写ExpectedCondition类或为它们创建我们自己的实用程序包.一些预期条件是:
> alertIsPresent()
> elementToBeClickable(定位器)
> elementToBeSelected(WebElement)
> frameToBeAvailableAndSwitchToIt(定位器)
> invisibilityOf(元素)
您可以在此处找到Expected Conditions支持的所有方法.
这个特殊的查询:
>搜索单个元素时,驱动程序将轮询HTML DOM,直到找到元素或配置的超时到期,然后再抛出NoSuchElementException.
>搜索多个元素时,驱动程序将轮询HTML DOM,直到找到至少一个元素或配置的超时已过期.
因此,根据第一种情况,驱动程序将仅等待3秒钟.
内容总结
以上是互联网集市为您收集整理的java – 隐式vs显式vs流利等待全部内容,希望文章能够帮你解决java – 隐式vs显式vs流利等待所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。