使用Java Selenium真正验证元素的存在

时间:2016-03-17 19:45:34

标签: java selenium selenium-webdriver automation testng

所以今天我遇到了一些奇怪的东西..我有一个测试,验证主页上是否存在页脚元素。我使用WebDriverWait(driverWait)的一个非常基本的方法..

public boolean verifyCarResearchLnkIsClickable() {
        return driverWait.until(ExpectedConditions.elementToBeClickable(selector.getCarResearch())).isDisplayed();
    }

然后我在测试步骤中使用TestNG的断言验证了这一点。

Assert.assertTrue(homePage.verifyCarResearchLnkIsClickable());

今天,我的测试正在通过,但元素没有显示在屏幕上。我在Chrome中使用了jquery来查看是否可以在检查器中找到该元素,但是元素不在屏幕上..所以发生的事情是我从检查员那里得到的代码包含了我的链接所以这就是为什么我的测试通过,但实际上它不在屏幕上..真正检查这个的方法是什么?这是正确的方法吗?如果这不会发生,并且在构建期间可能发生了一些奇怪的事情?

1 个答案:

答案 0 :(得分:1)

ExpectedConditions.elementToBeClickable(loc)检查:

  • 元素的存在
  • 元素的可见性,是否显示
  • 是否启用,即未主动禁用。

即。它是否可能是可点击的,无论该点击的结果如何。它可以是链接,按钮,也可以只是一段静态文本。

当然,不应该检查元素的状态以确定“真相”,而应该考虑功能性术语:实际点击元素并验证方面 - 详细的影响。

关于“显示性”的WebDriver规范has a lot to say

  

虽然WebDriver没有定义原语来确定   视口中元素的可见性,我们承认它是一个   许多用户的重要功能。这里我们包括推荐   方法将给出元素的简化近似   可见性,但请注意,它仅依赖于树遍历,并且   仅涵盖可见性检查的子集。

     

元素的可见性由感知可见的内容指导   对人眼来说。在这种情况下,元素的显示性不会   与可见性或显示样式属性相关

     

建议实现者确定元素的方法   可见性基于其性质和原因的粗略近似   树中的关系。 通常要考虑一个元素   如果它的任何部分在bounderies(sic)的画布上绘制,则可见   视口。 [...]

low-level code演示了实际的“显示?”使用的逻辑。它看起来很复杂,但评论只是说:

  

确定元素是否是用户称之为“显示”的元素。这意味着   元素显示在浏览器的视口中,并且只有   高度和宽度大于0px,并且其可见性不是“隐藏”   并且它的显示属性不是“无”[...]

在我看来,这一切都不能保证元素必然会被一双人眼所见,但这对你来说真的很重要吗?

如果我在无头浏览器中一夜之间进行连续自动化测试,对我来说无关紧要。我可能只关心点击加载页面的元素,将项目添加到购物车等,所以我可以验证实际的效果