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

完整的错误信息如下:

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

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

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


当前回答

当驱动程序试图点击元素时,如果元素改变了位置,就会发生这种情况(我在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;
});

其他回答

我遇到了这个问题,它似乎是由(在我的情况下)点击一个元素,弹出一个div在前面点击的元素。我通过在一个大的try catch块中包装我的点击来解决这个问题。

我有同样的问题,尝试了所有提供的解决方案,但它们都不适合我。 最后我用了这个:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("var evt = document.createEvent('MouseEvents');" + "evt.initMouseEvent('click',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null);" + "arguments[0].dispatchEvent(evt);", findElement(element));

希望这能有所帮助

在我的例子中,它在Firefox中运行正常,但在Chrome中失败了。在Chrome中,在更新Chrome驱动程序版本到最新版本后,该问题得到了修复。

如果您在一个模式(弹出式)中遇到这个问题,请注意,可能是在当前顶级模式下存在另一个具有相同属性的元素。这抓住了我,只是增加你的选择器的特异性,以减少范围的模式,你只是试图点击。

我遇到这个是因为这个元素上有一个加载对话框。我只是通过在使用this元素之前添加一个等待来解决这个问题。

try {
        Thread.sleep((int) (3000));
    } catch (InterruptedException e) {
        //
        e.printStackTrace();
    }

希望这对你有所帮助!