0

我有这样的问题:

有一个位置为 6,83 的链接被空div重叠,该 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 中是可点击问题的人。

4

2 回答 2

0

您可以使用elementFromPointgetBoundingClientRect方法。
请参阅这两个方法链接以获取更多详细信息。

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

getBoundingClientRect:这是一种方法,最初由 Internet Explorer 5 引入(现在包含在 Firefox 3 中),它提供元素的顶部、右侧、底部和左侧偏移坐标。在 PPK 在他最近的一篇文章中提到了这种方法之后,便便它的适用性,我想我需要一些时间来展示它的有用性。是什么让这种方法特别方便的是计算元素偏移位置的替代方法非常缓慢和错误,以至于它接近可笑。

于 2013-04-16T08:00:26.307 回答
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 中是可点击问题的人。

于 2013-12-24T07:53:02.623 回答