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);
    }
}

#1 热门回答(214 赞)

使用findElements而不是findElement

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

要检查元素是否存在,你可以尝试这样做

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

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


#2 热门回答(44 赞)

那个简单地查找元素并确定它是否存在的私有方法怎么样:

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

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

编辑:你甚至可以更进一步,并采取一个By elementLocatoras参数,如果你想通过id以外的东西找到元素,消除问题。


#3 热门回答(12 赞)

我发现这适用于Java:

WebDriverWait waiter = new WebDriverWait(driver, 5000);
waiter.until( ExpectedConditions.presenceOfElementLocated(by) );
driver.FindElement(by);