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

2022-08-31 06:30:39

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

我发现这篇文章:Selenium c#Webdriver:等到Element存在,但这是针对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);
    }
}

答案 1

请代替 使用 。findElementsfindElement

findElements如果未找到匹配的元素而不是异常,则将返回空列表。

要检查元素是否存在,可以尝试此操作

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

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

官方文档建议使用此方法:

不应使用 findElement 来查找不存在的元素,而应使用 findElements(By) 并断言零长度响应。


答案 2

如果私有方法只是查找元素并确定它是否存在,如下所示:

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

这将很容易,并完成工作。

编辑:您甚至可以更进一步并采用as参数,如果您想通过id以外的内容查找元素,则可以消除问题。By elementLocator


推荐