我有一个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
然后返回true
或false
来查看此ID是否存在。问题在于,即使隐藏了该元素,它也总是会返回true
。我想我需要以不同的方式定位。也许寻找ng-hide
是否存在?
我的退货方法如下:
public boolean getUpdateContactDetailsErrorMessage() throws InterruptedException {
Boolean errorPresent = driver.findElements(updateContactDetailsErrorMessage).size()>0;
return errorPresent;
}
答案 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;
}