检查班级上是否存在ng-hide

时间:2018-08-23 00:52:02

标签: java selenium selenium-webdriver

我有一个UI元素,它是一条错误消息,当不显示错误消息时将显示此消息:

<section id="errorPanel" class="alert alert-danger alert-top ng-hide" data-ng-show="validationData.serverError">
    Unknown server error occurred. Please try again.
</section>

当显示错误消息时,如下所示:

<section id="errorPanel" class="alert alert-danger alert-top" data-ng-show="validationData.serverError" style="">
    Unknown server error occurred. Please try again.
</section>

因此,当消息不显示时,该类包含ng-hide

我的页面对象的顶部包含定位符,因此该元素的位置:

private By updateContactDetailsErrorMessage = By.id("errorPanel");

然后是一个布尔返回方法,该方法通过使用size>0然后返回truefalse来查看此ID是否存在。问题在于,即使隐藏了该元素,它也总是会返回true。我想我需要以不同的方式定位。也许寻找ng-hide是否存在?

我的退货方法如下:

public boolean getUpdateContactDetailsErrorMessage() throws InterruptedException {
    Boolean errorPresent = driver.findElements(updateContactDetailsErrorMessage).size()>0;
    return errorPresent;
}

2 个答案:

答案 0 :(得分:2)

如果元素存在于DOM中,driver将会找到它,而不必将其可见。这就是为什么该元素始终位于并且列表不为空的原因。

您可以使用findElement(单个元素)定位元素,然后使用getAttribute()来查找元素是否具有ng-hide

public boolean getUpdateContactDetailsErrorMessage() throws InterruptedException {
    WebElement element = driver.findElement(updateContactDetailsErrorMessage);
    return element.getAttribute("class").contains("ng-hide");
}

答案 1 :(得分:0)

在这种情况下,如果显示错误消息,则元素的高度将大于0。添加验证以获取元素的高度。 代码:

private By updateContactDetailsErrorMessage = By.id("errorPanel");

public boolean getUpdateContactDetailsErrorMessage() throws InterruptedException {
    Boolean errorPresent = driver.findElement(updateContactDetailsErrorMessage).size().height>0;
    return errorPresent;
}