【问题标题】:Truly verifying the presence of an element using Java Selenium使用 Java Selenium 真正验证元素的存在
【发布时间】:2016-07-04 09:02:08
【问题描述】:

所以我今天遇到了一些奇怪的事情。我有一个测试可以验证主页上是否存在页脚元素。我使用 WebDriverWait(driverWait)..

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

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

Assert.assertTrue(homePage.verifyCarResearchLnkIsClickable());

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

【问题讨论】:

    标签: java selenium selenium-webdriver automation testng


    【解决方案1】:

    ExpectedConditions.elementToBeClickable(loc) 检查:

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

    即它是否可能是可点击的,无论点击的结果是什么。它可以是一个链接、一个按钮或只是一段静态文本。

    当然,与其通过检查元素的状态来确定“真相”,不如从功能方面考虑:实际上单击元素并验证侧面-效果详细。


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

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

    元素的可见性取决于感知可见的内容 到人眼。在这种情况下,元素的显示性不 与可见性或显示样式属性有关

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

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

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

    在我看来,这些都不能保证该元素一定会被人眼看到,但这对您来说真的很重要吗?

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

    【讨论】:

    • 是的,这是我觉得我要使用的解决方案,只是因为我没有看到其他方法。唯一的问题是,这是一个相当大的公司的自动化项目,页脚包含近 30 个链接。想知道是否有更有效的方法来做到这一点,但我想没有。感谢您的回复!
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多