断言不存在webelement - 快速解决方案?

时间:2013-07-01 11:49:34

标签: java webdriver nosuchelementexception

我需要断言我的测试中不存在多次webelement。我已在网站上搜索过此内容,并在答案中找到了我的代码中已有的内容:

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

我想知道是否有更快的方法?因为每当元素不存在时运行,捕获异常需要很长时间。我知道这是因为webdriver正在搜索整个页面中的元素,但仍然......更快的方式?

是否有可能以极低的超时使用WebDriverWait?

由于

3 个答案:

答案 0 :(得分:2)

这是由于WebDriver中的隐式等待。为避免在未找到元素时等待,您需要在验证条件之前将隐式等待时间设置为零。

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

请参阅this以了解上述流程的实施情况。

答案 1 :(得分:1)

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

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

这样做的好处是无需等待driver中指定的超时。希望是你的另一种选择。

答案 2 :(得分:0)

尝试此功能

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