我需要在我的测试中多次断言一个网络元素不存在。我已经在网站上搜索过这个,并在答案中找到了我的代码中已有的内容:
try{
WebElement w = driver.findElement(By.id("warning"));
} catch (NoSuchElementException e){
return true;
}
return false;
我想知道有没有更快的方法?因为每次这个在元素不存在的时候运行,都需要很长时间才能捕获到异常。我知道这是因为 webdriver 正在搜索整个页面的元素,但仍然......有更快的方法吗?
是否有可能以某种方式使用超时时间非常短的 WebDriverWait?
谢谢
WebDriver隐式等待。为避免在找不到元素时等待,您需要在验证条件之前将隐式等待时间设置为零。
有关上述过程的实施,请参见this。
另一种选择是查找元素列表,然后检查列表的长度。
List<WebElement> warnings = driver.findElements(By.id("warning"));
if warnings.length() == 0 {
return true;
} else return false;
这样做的好处是不必等待
driver
中指定的超时。希望对你来说是一个可能的选择。
试试这个功能
boolean isElementExists(By elementSelector) {
return driver.findElements(elementSelector).size() > 0;
}
将驱动程序隐式等待更改为持续时间而不是超时,因此如果您的隐式等待是 Duration.ofSeconds(20),那么如果在 2 秒内找到元素,它将选择或在 20 秒后失败。