Assert that a webelement is not present - 快速解决方案?

问题描述 投票:0回答:4

我需要在我的测试中多次断言一个网络元素不存在。我已经在网站上搜索过这个,并在答案中找到了我的代码中已有的内容:

try{
    WebElement w = driver.findElement(By.id("warning"));
} catch (NoSuchElementException e){
    return true;
}
return false;

我想知道有没有更快的方法?因为每次这个在元素不存在的时候运行,都需要很长时间才能捕获到异常。我知道这是因为 webdriver 正在搜索整个页面的元素,但仍然......有更快的方法吗?

是否有可能以某种方式使用超时时间非常短的 WebDriverWait?

谢谢

java webdriver nosuchelementexception
4个回答
3
投票

WebDriver隐式等待。为避免在找不到元素时等待,您需要在验证条件之前将隐式等待时间设置为零。

  • 将 implicity_wait 设置为 0,以便 WebDriver 不会隐式 等待。
  • 找到元素时返回 True。赶上 NoSuchElementException 并在我们发现 元素不存在,而不是用一个停止测试 例外。
  • 在操作结束后将 implicitly_wait 设置回 10 完成以便 WebDriver 将来隐式等待。

有关上述过程的实施,请参见this


2
投票

另一种选择是查找元素列表,然后检查列表的长度。

List<WebElement> warnings = driver.findElements(By.id("warning"));
if warnings.length() == 0 {
    return true;
} else return false;

这样做的好处是不必等待

driver
中指定的超时。希望对你来说是一个可能的选择。


0
投票

试试这个功能

boolean isElementExists(By elementSelector) {
      return driver.findElements(elementSelector).size() > 0;
}

0
投票

将驱动程序隐式等待更改为持续时间而不是超时,因此如果您的隐式等待是 Duration.ofSeconds(20),那么如果在 2 秒内找到元素,它将选择或在 20 秒后失败。

© www.soinside.com 2019 - 2024. All rights reserved.