我有这样的问题:
有一个位置为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中点击问题。
答案 0 :(得分:0)
您可以使用 elementFromPoint或getBoundingClientRect方法
有关详细信息,请参阅这两个方法链接。
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中点击问题。