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

Detect several elements from position using javascript

本文关键字:几个 元素 javascript 位置 检测 使用      更新时间:2023-09-26

我有这样的问题:

有一个位置为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

可以使用elementFromPoint或getBoundingClientRect方法。
详情请参阅这两种方法的链接。

elementFromPoint:这个方法对于拖放脚本来说是天赐之物。当用户放下被拖动的元素时,找出放置点上的元素,然后从那里开始操作。不需要更复杂的计算。

getBoundingClientRect:这是一个方法,首先由Internet Explorer 5引入(现在包含在Firefox 3中),它提供元素的上、右、下和左偏移坐标。在PPK在他最近的一篇文章中提到了这个方法,贬低了它的适用性之后,我想我应该花点时间来展示它有多有用。使这种方法特别方便的是,计算元素偏移位置的另一种方法非常慢,而且有很多bug,它的边界是滑稽的。

关于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