【问题标题】:How do I determine if a WebElement exists with Selenium?如何确定 Selenium 是否存在 WebElement?
【发布时间】:2017-04-28 18:11:11
【问题描述】:

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

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

这是我目前拥有的

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

但是,这会尝试识别可能不存在的 WebElement。当它不存在时,我得到:

没有这样的元素”例外。

【问题讨论】:

  • 在对可能不存在的元素使用 FindBy 注释时尝试使用 List?如果不是,大小将为零。
  • @Grasshopper 这是一个很好的答案!你为什么不让它成熟而不是简单的评论?
  • @Cryptor JeffC 的回答具有相同的逻辑,我认为这是处理这些情况的正确方法。
  • @Grasshopper 对不起,如果没有得到什么,但是如何在没有 WebDriver 元素的 Page Object 模型中使用它,因为类是使用 PageFactory.initElements() 方法初始化?
  • @Cryptor 添加一个新问题。

标签: java selenium selenium-webdriver pageobjects


【解决方案1】:

最佳做法是按照您最初的建议进行操作,使用.findElements() 并检查.size != 0,或者您也可以使用我的偏好.isEmpty()。您可以创建如下所示的 Util 函数来测试元素是否存在。

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

    【讨论】:

    • 一个警告......这个答案有一个隐藏的陷阱。如果您想确认某个元素未显示但该元素不存在怎么办?此函数将返回false,测试将通过,但该元素甚至不在页面上……误报。测试元素是否存在...然后测试它是否已启用。
    • 在检查元素的任何条件之前,我们需要检查元素是否存在。
    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2017-01-23
    • 2019-12-13
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    相关资源
    最近更新 更多