1

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

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

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

是否有可能以非常低的超时时间使用 WebDriverWait?

谢谢

4

3 回答 3

3

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

  • 将implicity_wait 设置为0,这样WebDriver 就不会隐式等待。
  • 找到元素时返回 True。当我们发现该元素不存在时捕获 NoSuchElementException 并返回 False,而不是用异常停止测试。
  • 操作完成后将implicitly_wait设置回10,以便WebDriver将来隐式等待。

有关上述过程的实现,请参见此内容。

于 2013-07-01T12:14:44.643 回答
2

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

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

这样做的好处是不必等待driver. 希望为您提供一个可能的替代方案。

于 2013-07-01T12:05:02.613 回答
0

试试这个功能

boolean isElementExists(By elementSelector) {
      return driver.findElements(elementSelector).size() > 0;
}
于 2013-07-01T19:00:44.283 回答