如何检查元素在视口中是否可见?

时间:2018-03-06 15:08:20

标签: grails spock geb

如果我位于页面底部,如果该元素位于页面顶部,我如何检查某个元素是否可见。

我需要编写一个测试,我向下滚动到页面底部,当我点击div时,它会将我移回页面顶部。下一步是检查我是否在那个位置。 我的想法是,我只需要检查该元素是否可见,但事实证明这并不容易。有什么建议吗?

.isDisplayed()和.isFocused()不是我需要的。

修改 我有一个想法,我需要两种方法。

第一个是得到元素的y坐标(我们只需要y),但问题是getY()返回相对于当前位置的数字,所以我需要一些东西将我带到那个元素然后得到y坐标。所以我的方法看起来像这样:

int getYCoordinat() {
        // first move to the element
        interact {
            moveToElement(element)
        }
        // get y coord
            return element.getY()
    }

第二种方法看起来像这样:

boolean isScrolledToElement(int yCoordinateOfElement) {
            int y = element.getY()
            return y == yCoordinateOfElement
        }
    }

首先我要调用 getYCoordinat(),将整数存储到 yCoordinateOfElement 中。 然后我会点击div将我移动到元素并调用 isScrolledToElement(yCoordinateOfElement)

但它不起作用,因为只有当元素不可见时,moveToElement才会将您移动到该元素。因此,如果我们停留在原地,因为 moveToElement()没有移动我们,因为元素已经可见,我们得到错误的Y坐标,它不会与那个相同当我们点击将我们移动到元素的div时,我们就会得到。

1 个答案:

答案 0 :(得分:0)

Here is the only solution I could find.基本上你需要查看元素右下角的像素坐标是否在窗口内。

取自链接:

private boolean isWebElementVisible(WebElement w) {
    Dimension weD = w.getSize();
    Point weP = w.getLocation();
    Dimension d = driver.manage().window().getSize();

    int x = d.getWidth();
    int y = d.getHeight();
    int x2 = weD.getWidth() + weP.getX();
    int y2 = weD.getHeight() + weP.getY();

    return x2 <= x && y2 <= y;
}