使用javascript从位置检测多个元素

时间:2013-04-16 07:43:07

标签: java javascript webdriver

我有这样的问题:

有一个位置为6,83的链接,该链接与空 div 重叠,重叠整个页面。

此链接无法点击,因为它已重叠。但!当我试图执行document.elementFromPoint(6,83)时,它返回的不是我的div,而是链接:(如何检测此div重叠链接?

我需要在Java + WebDriver中使用它,但JS也可以是一个解决方案。

谢谢。

UPD :(我的评分不够): 我找到了解决方案!这很奇怪,但如果document.elementFromPoint调用了元素的左上角坐标,它将返回相同的元素,即使它是重叠的。这就是为什么我们可以在元素的CENTER中检查重叠。

正如我对WebDriver的询问,这是解决方案:

public static boolean isElementClickable(WebElement element) { return element.isDisplayed() && element.isEnabled() && element.equals(getJSExecutor(getDriverFromContext(element)) .executeScript("return document.elementFromPoint" + "(" + Integer.toString(((Locatable)element).getLocationOnScreenOnceScrolledIntoView().getX() + (element.getSize().getWidth() / 2)) + ", " + Integer.toString(((Locatable)element).getLocationOnScreenOnceScrolledIntoView().getY() + (element.getSize().getHeight() / 2)) + ")")); }

我希望这可以帮助任何有相同问题或元素的人在WebDriver中点击问题。

2 个答案:

答案 0 :(得分:0)

您可以使用 elementFromPointgetBoundingClientRect方法 有关详细信息,请参阅这两个方法链接。

elementFromPoint:此方法是拖放脚本的天赐之物。当用户放下拖动的元素时,找出放置点处的元素并从那里继续。不需要更复杂的计算。

getBoundingClientRect:这是一种方法,首先由Internet Explorer 5引入(现在包含在Firefox 3中),它提供元素的顶部,右侧,底部和左侧偏移坐标。在PPK最近的一篇文章中提到这种方法之后,我认为我需要一些时间来证明它的适用性。是什么让这种方法特别方便的是,计算元素偏移位置的替代方法是如此可怕的缓慢和错误,它与滑稽的边界接近。

答案 1 :(得分:0)

正如我对WebDriver的询问,这是解决方案:

public static boolean isElementClickable(WebElement element) { 
    return element.isDisplayed() && element.isEnabled() && 
    element.equals(getJSExecutor(getDriverFromContext(element)) .executeScript(
        "return document.elementFromPoint" + "(" + 
        Integer.toString(((Locatable)element).getLocationOnScreenOnceScrolledIntoView().getX() + 
        (element.getSize().getWidth() / 2)) + ", " + 
        Integer.toString(((Locatable)element).getLocationOnScreenOnceScrolledIntoView().getY() + 
        (element.getSize().getHeight() / 2)) + ")")); 
}

我希望这可以帮助任何有相同问题或元素的人在WebDriver中点击问题。