使用 Selenium WebDriver 测试元素是否存在

新手上路,请多包涵

有没有办法测试元素是否存在?任何 findElement 方法都会以异常结束,但这不是我想要的,因为元素可能不存在,这没关系。那不是测试失败,所以异常不能成为解决方案。

我找到了这篇文章: Selenium C# WebDriver: Wait until element is present

但这是针对 C# 的,我不太擅长。 Java 中的代码是什么?我在 Eclipse 中尝试过它,但我没有将它直接放入 Java 代码中。

这是代码:

 public static class WebDriverExtensions{
    public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds){

        if (timeoutInSeconds > 0){
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
            return wait.Until(drv => drv.FindElement(by));
        }

        return driver.FindElement(by);
    }
}

原文由 tester 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 884
2 个回答

使用 findElements 而不是 findElement

findElements 如果没有找到匹配的元素而不是异常,将返回一个空列表。

要检查元素是否存在,您可以试试这个

Boolean isPresent = driver.findElements(By.yourLocator).size() > 0

如果至少找到一个元素,则返回 true,如果不存在,则返回 false。

官方文档 推荐这种方法:

findElement 不应用于查找不存在的元素,而是使用 findElements(By) 并声明零长度响应。

原文由 el roso 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用一个私有方法来简单地查找元素并确定它是否存在,如下所示:

 private boolean existsElement(String id) {
    try {
        driver.findElement(By.id(id));
    } catch (NoSuchElementException e) {
        return false;
    }
    return true;
}

这将非常容易并且可以完成工作。

您甚至可以更进一步,将 By elementLocator 作为参数,如果您想通过 id 以外的其他方式查找元素,则可以消除问题。

原文由 Dennis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题