你不能。
implicit
等待时间将优先于显式等待。如果您的implicit
时间是 30 秒,那么您运行的任何查找将至少需要 30 秒,以防元素不存在。您可以做的是操纵implicit
框架上的等待时间,但不确定如何与 IDE 配合使用,我从未使用过它。
我创建了一个返回boolean
结果的自定义方法。输入是WebDriver (CSS, xpath, etc)支持的任何By 定位器。或者,您可以根据需要对其进行修改。
它有助于使我的代码更简洁、更快速。我希望它也能帮助其他人。
默认pooling
值为 500 毫,但可以在wait
对象上更改。
public boolean isElementNotPresent(final By locator) {
boolean result = false;
// use your custom timeout here
long timeout = ConfigurationProvider.getWebDriverWaitTimeout();
// log4j used
msg = "isElementNotPresent: " + locator;
LOG.info(msg);
Wait<WebDriver> wait = new FluentWait<WebDriver>(
getDriver()).withTimeout(timeout, TimeUnit.SECONDS);
try {
result = wait.until(new Function<WebDriver, Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return driver.findElements(locator).size() == 0;
}
});
} catch (TimeoutException e) {
msg = String.format("Element remained visible after %.2f seconds",
((float) timeout / 1000));
LOG.debug(msg);
} catch (Exception e) {
msg = "Exception at isElementNotPresent()\n" + e.getMessage();
// I use jUnit to fail my test
Assert.fail(msg);
}
return result;
};