java何时支持await,Java何时在Selenium Webdriver中使用显式等待与隐式等待?

小编典典

TL; DR:始终使用显式等待。忘记隐式等待的存在。

以下是显式等待与隐式等待之间的区别的简要概述:

显式等待:

记录和定义的行为。

在硒的本地部分运行(以你的代码语言显示)。

可以在你能想到的任何条件下工作。

返回成功或超时错误。

可以将不存在元素定义为成功条件。

可以自定义重试和异常之间的延迟以忽略。

隐式等待:

没有记录和几乎不确定的行为。

在硒的远程部分(控制浏览器的部分)中运行。

仅适用于find元素方法。

返回找到的元素或(在超时后)找不到的元素。

如果检查是否缺少元素,则必须始终等到超时。

除全局超时外,无法自定义。

带有说明的代码示例。第一次隐式等待:

WebDriver driver = new FirefoxDriver();

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

driver.get("http://somedomain/url_that_delays_loading");

WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));

现在显式等待:

WebDriver driver = new FirefoxDriver();

driver.get("http://somedomain/url_that_delays_loading");

WebDriverWait wait = new WebDriverWait(driver, 10);

WebElement myDynamicElement = wait.until(

ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

两个代码示例都做同样的事情。找到某个元素,如果10秒后找不到,则放弃。隐式等待只能做到这一点。它只能尝试找到具有超时的元素。显式等待的优势在于它可以等待各种条件。还可以自定义超时并忽略某些异常。

的可能的条件例如:elementToBeClickable,numberOfElementsToBeMoreThan或invisibilityOf。这是内置的预期条件的列表:https : //seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html

更多说明:

隐式等待超时仅对findElement*方法有效。如果设置,则所有人findElement*将“等待”设置的时间,然后声明找不到元素。

findElement*未定义如何等待。它取决于浏览器或操作系统或硒的版本。可能的实现方式是:

反复尝试查找元素,直到超时。找到元素后立即返回。

尝试查找元素。等到超时。再试一次。

等到超时。尝试查找元素。

该列表是从观察和读取错误报告以及粗略读取硒源代码中收集的。

我的结论是:隐式等待是不好的。功能是有限的。该行为是未记录的,并且取决于实现。

显式等待可以做所有隐式等待可以做的一切。显式等待的唯一缺点是冗长的代码。但是这种冗长的表达使代码变得清晰。显式比隐式更好。对?

2020-03-08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值