我只在Chrome浏览器中看到这个。
完整的错误信息如下:
“org.openqa.selenium。WebDriverException:元素在点(411,675)不可点击。其他元素会收到点击:……”
“将接收点击”的元素位于相关元素的一侧,而不是在元素的顶部,也没有重叠,也没有在页面上移动。
我试过加一个偏移量,但也不行。该项目在显示的窗口上,不需要滚动。
我只在Chrome浏览器中看到这个。
完整的错误信息如下:
“org.openqa.selenium。WebDriverException:元素在点(411,675)不可点击。其他元素会收到点击:……”
“将接收点击”的元素位于相关元素的一侧,而不是在元素的顶部,也没有重叠,也没有在页面上移动。
我试过加一个偏移量,但也不行。该项目在显示的窗口上,不需要滚动。
当前回答
Re Tony Lâmpada的回答,评论#27确实为我解决了这个问题,除了它提供了Java代码,而我需要Python。下面是一个Python函数,它滚动到元素的位置,然后单击它。
def scroll_to_and_click(xpath):
element = TestUtil.driver.find_element_by_xpath(xpath)
TestUtil.driver.execute_script('window.scrollTo(0, ' + str(element.location['y']) + ');')
element.click()
这解决了我在Chrome 34.0的问题。它在Firefox 28.0和IE 11中没有造成伤害;这些浏览器不受这个问题的影响,但在单击元素之前滚动到元素的位置仍然不是一件坏事。
其他回答
我也遇到了同样的问题,这是由div和div内链接之间的id冲突引起的。所以驱动程序点击了div而不是我想要的链接。 我改变了div id,它正常工作。
之前:
<div id="logout"><a id="logout" href="logoutLink">logout</a></div>
后:
<div id="differentId"><a id="logout" href="logoutLink">logout</a></div>
如果您在一个模式(弹出式)中遇到这个问题,请注意,可能是在当前顶级模式下存在另一个具有相同属性的元素。这抓住了我,只是增加你的选择器的特异性,以减少范围的模式,你只是试图点击。
有趣的是,我花了这么多时间研究各种各样的答案,没有人尝试过显而易见的答案,当然,我也没有。如果您的页面多次使用相同的id,就像我的页面一样("newButton",),而您想要的id不是第一个找到的,那么您很可能会得到这个错误。最简单的事情(c#):
var testIt = driver.FindElements(By.Id("newButton"));
注意它是FindElements,而不是FindElement。
然后测试从检索中得到了多少结果。如果是第二个,你可以使用:
testit[1].Click();
或者让那些重复使用id的人来修复它们。
我也因为同样的原因被卡了两天,实际上滚动会让它工作,因为可能是数据无法正常加载,这可能会导致同样的错误一次又一次。
我所做的是,我随机向下滚动,一次是(0,-500),然后是(0,400),然后是(0.-600),你可以根据你的使用给出这些滚动值。只要滚动它,你有内容点击。
driver.execute_script("scrollBy(0,-500);")
sleep(5)
driver.execute_script("scrollBy(0,400);")
sleep(5)
driver.execute_script("scrollBy(0,-600);")
sleep(5)
这真的很有效:)
我也面临着同样的问题,我使用了延迟,这在我这边很有效。Page正在刷新和获取其他定位器。
Thread.sleep(2000);
Click(By.xpath("//*[@id='instructions_container']/a"));