我只在Chrome浏览器中看到这个。

完整的错误信息如下:

“org.openqa.selenium。WebDriverException:元素在点(411,675)不可点击。其他元素会收到点击:……”

“将接收点击”的元素位于相关元素的一侧,而不是在元素的顶部,也没有重叠,也没有在页面上移动。

我试过加一个偏移量,但也不行。该项目在显示的窗口上,不需要滚动。


当前回答

在Visual Studio 2013中,如果你启用BrowserLink -它会在屏幕底部显示一个BrowserLink导航栏。如果你想点击的项目在导航栏后面,它会给出错误。禁用BrowserLink为我解决了这个问题。

其他回答

在chromedriver中似乎有一个bug(问题是它被标记为不会修复) ——> GitHub链接

(也许是对“自由赞助者”的悬赏?)

在第27条评论中提出了一个解决方案。 也许这对你有用

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中没有造成伤害;这些浏览器不受这个问题的影响,但在单击元素之前滚动到元素的位置仍然不是一件坏事。

我在点击Angular Material菜单中的一个按钮时就遇到了这个问题。每当我单击菜单中的按钮时,.cdk-overlay-窗格就会收到单击。解决方案是增加菜单内按钮的z-index。

.cdk-overlay-pane button {
  z-index: 1001;
}

我也面临着同样的问题,我使用了延迟,这在我这边很有效。Page正在刷新和获取其他定位器。

Thread.sleep(2000);
        Click(By.xpath("//*[@id='instructions_container']/a"));

当驱动程序试图点击元素时,如果元素改变了位置,就会发生这种情况(我在IE中也见过这种情况)。驱动程序保留初始位置,但当它真正点击它时,该位置不再指向该元素。顺便说一句,FireFox驱动程序没有这个问题,显然它是通过编程方式“点击”元素的。

无论如何,当你使用动画或简单地动态改变元素的高度(例如$("#foo").height(500))时,就会发生这种情况。你需要确保你只点击高度已经“确定”的元素。我最终得到了这样的代码(c#绑定):

if (!(driver is FirefoxDriver))
{
    new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(
        d => d.FindElement(By.Id(someDynamicDiv)).Size.Height > initialSize);
}

在动画或任何其他你不容易查询的因素的情况下,你可以使用一个“通用”方法,等待元素是静止的:

var prevLocation = new Point(Int32.MinValue, Int32.MinValue);
int stationaryCount = 0;
int desiredStationarySamples = 6; //3 seconds in total since the default interval is 500ms
return new WebDriverWait(driver, timeout).Until(d => 
{
    var e = driver.FindElement(By.Id(someId));
    if (e.Location == prevLocation)
    {
        stationaryCount++;
        return stationaryCount == desiredStationarySamples;
    }

    prevLocation = e.Location;
    stationaryCount = 0;
    return false;
});