如何使用Selenium确定WebElement是否存在?

5

我知道我可以使用(driver.findElements(By.xpath("Xpath Value")).size() != 0);

但是,我正在使用页面对象模型,其整个目的是在单独的类中预定义Web元素,因此我不必在测试类中“通过查找元素”。

这是我目前拥有的:

if (objPage.webElement.isEnabled()){
   System.out.println("found element");
}else{
   System.out.println("element not found");
}

然而,这试图识别可能不存在的WebElement。当它不存在时,我会得到:“没有这样的元素”异常。

2
当您使用FindBy注释查找可能不存在的元素时,请尝试使用List<WebElement>。否则,大小将为零。 - Grasshopper
@Cryptor JeffC的答案有相同的逻辑,我认为这是处理这些情况的正确方式。 - Grasshopper
@Cryptor 添加一个新问题。 - Grasshopper
规范问题包括 *使用Selenium WebDriver测试元素是否存在*(32个答案,2011年)和 *WebDriver:检查元素是否存在?*(14个答案,2011年)。 - Peter Mortensen
这是实际的消息吗?不是类似于“selenium.common.exceptions.NoSuchElementException”这样的东西吗? - Peter Mortensen
显示剩余2条评论
2个回答

10

最佳实践是按照您最初提出的建议。使用.findElements()并检查.size != 0,或者您也可以使用我的首选项.isEmpty()。您可以创建一个类似下面的实用函数来测试元素是否存在。

public boolean elementExists(By locator)
{
    return !driver.findElements(locator).isEmpty();
}

您也可以将此构建为页面对象中的函数。


-2
您可以使用isDisplayed()函数来检查元素是否可见。编写一个满足您需求的方法非常简单,例如:
public boolean isElementDisplayed(WebElement element) {
    try {
        return element.isDisplayed();
    } catch(NoSuchElementException e) {
        return false;
    }
}

3
警告一句话...这个答案有一个隐藏的陷阱。如果您想确认一个元素没有显示出来,但是该元素不存在怎么办?这个函数将返回 false 并且测试将通过,但是该元素甚至不在页面上...这是一个错误的肯定结果。先测试元素是否存在...然后再测试它是否可用。 - JeffC
在对元素进行任何条件检查之前,我们需要检查其是否存在。 - Akarsh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接