1. 概述

本教程将学习如何使用 Selenium WebDriver 检查元素是否存在。

核心原则:大多数场景下,优先使用显式等待(explicit waits)确保元素存在或可见后再操作。但有时我们仅需判断元素是否存在,无需断言,以便根据元素存在与否实现特殊逻辑。

通过本教程,你将掌握元素存在性检查的实用技巧。

2. 使用 findElements() 方法

findElements() 方法返回匹配定位条件的元素列表。当无匹配元素时,返回空列表而非异常。通过检查列表是否为空即可判断元素是否存在:

boolean isElementPresentCheckByList(By by) {
    List<WebElement> elements = driver.findElements(by);
    return !elements.isEmpty();
}

⚠️ 适用场景:需要同时处理多个元素或仅需判断存在性时,此方法简洁高效。

3. 使用 findElement() 方法

findElement() 方法是另一种常用元素定位方式。当元素存在时返回单个 WebElement,**若不存在则抛出 NoSuchElementException**。

通过 try-catch 处理异常可判断元素存在性:

boolean isElementPresentCheckByHandleException(By by) {
    try {
        driver.findElement(by);
        return true;
    } catch (NoSuchElementException e) {
        return false;
    }
}

踩坑提醒:此方法会因异常处理产生性能开销,仅适用于必须明确处理单个元素缺失的场景(如关键元素缺失时需记录日志或执行补救逻辑)。

4. 结论

本文探讨了两种 Selenium WebDriver 元素存在性检查方案:

  • findElements():通过空列表判断
  • findElement() + 异常捕获

最佳实践

  • 仅需判断存在性 → 用 findElements()
  • 需断言元素存在 → 优先使用显式等待 + ExpectedConditions

根据实际需求选择合适方案,可避免脚本崩溃并提升测试健壮性。完整示例代码可查阅 GitHub 仓库


原始标题:Checking if an Element Exists With Selenium Webdriver | Baeldung