使用javascript从位置检测几个元素
Detect several elements from position using javascript
我有这样的问题:
有一个位置为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
- 在几个元素上模拟onclick事件
- 如何更改与Backbone集合中的模型相关联的几个元素的css属性
- 如何在其他几个元素中选择锚点
- 缩短几个元素的onclick代码 - JavaScript
- “功能上”生成一个仅包含几个元素的列表
- 使用 jquery 为每几个随机元素添加类
- 使用用户输入值从 DOM 中删除几个元素
- 几个元素上的一个事件
- 获取存储在几个HTML元素中的数据
- html5视频元素有任何错误?它不会在几个小时后继续播放内容
- 如何检查几个元素中是否存在一个
- 选择所有DOM元素,直到出现几个DOM元素中的一个为止
- 将几个jqueryui元素相互绑定
- 敲除:绑定到同一可观察对象的几个 DOM 元素
- jquery获取指定了几个类的元素的特定类名
- 使用setTimeout在X秒后隐藏几个元素
- 从DIV JavaScript中的几个元素更改ID和NAME
- Wordpress将鼠标悬停在链接上,几个元素发生了变化
- 使用javascript从位置检测几个元素
- 操纵几个元素的Angular JS指令