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

完整的错误信息如下:

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

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

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


当前回答

我也在努力解决这个问题。代码在FF中工作正常,在Chrome上失败。我试着做的是点击一个复选框——如果它不在视图中,我会滚动到视图,然后点击。即使滚动到视图在Chrome中工作,只有底部几个像素的复选框是不可见的,所以网络驱动程序拒绝点击它。

我的解决办法是:

WebElement element = _sectorPopup.findElement(...);

((Locatable) element).getCoordinates().inViewPort();
try {
    element.click();
} catch (Exception e) {
    new Actions(getWebDriver()).sendKeys(Keys.PAGE_DOWN).perform();
    element.click();
}

Chrome也有sendKeys的问题,使用动作有时是必要的。显然,你需要知道哪个方向和你需要走多少,所以你的里程可能会有所不同。但我更喜欢这个javascript黑客,所以我把它贴在这里,以防别人会发现它有用。

其他回答

错误信息解释:

错误消息只是说,您想要单击的元素存在,但它不可见。它可能被什么东西覆盖,或者暂时看不见。

元素在测试时不可见的原因有很多。请重新分析您的页面,并为您的情况找到合适的解决方案。

特殊情况的解决方案:

在我的例子中,当我刚刚点击的屏幕元素的工具提示出现在我想要点击的下一步元素上时,就发生了这个错误。离焦是我需要的解决方案。

快速解决散焦的方法是点击屏幕另一部分的其他元素,这些元素“没有”反应。点击动作后什么都不会发生。 正确的解决方案是在弹出工具提示的元素上调用element.blur(),这将使工具提示消失。

我也在努力解决这个问题。代码在FF中工作正常,在Chrome上失败。我试着做的是点击一个复选框——如果它不在视图中,我会滚动到视图,然后点击。即使滚动到视图在Chrome中工作,只有底部几个像素的复选框是不可见的,所以网络驱动程序拒绝点击它。

我的解决办法是:

WebElement element = _sectorPopup.findElement(...);

((Locatable) element).getCoordinates().inViewPort();
try {
    element.click();
} catch (Exception e) {
    new Actions(getWebDriver()).sendKeys(Keys.PAGE_DOWN).perform();
    element.click();
}

Chrome也有sendKeys的问题,使用动作有时是必要的。显然,你需要知道哪个方向和你需要走多少,所以你的里程可能会有所不同。但我更喜欢这个javascript黑客,所以我把它贴在这里,以防别人会发现它有用。

在测试了所有提到的建议后,没有一个奏效。我写了这个代码。它有效,但并不漂亮

public void click(WebElement element) {
    //https://code.google.com/p/selenium/issues/detail?id=2766 (fix)
    while(true){
        try{
            element.click();
            break;
        }catch (Throwable e){
            try {
                Thread.sleep(200);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
    }
}

public void click(String css) {
    //https://code.google.com/p/selenium/issues/detail?id=2766 (fix)
    while(true){
        try{
            driver.findElement(By.cssSelector(css)).click();
            break;
        }catch (Throwable e){
            try {
                Thread.sleep(200);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
    }
}

今天我遇到了同样的问题。如果我说我是如何解决问题的,你不会相信我。

通过最大化浏览器大小

是的,这是一个指针问题,意味着浏览器的大小。为此,您只需要手动或通过代码最大化窗口大小。

我在硒驱动的Chrome窗口开得太小的情况下见过这种情况。要点击的元素不在视口中,因此正在失败。

这听起来合乎逻辑……真正的用户必须调整窗口大小或滚动,以便能够看到元素,并实际上单击它。

在指示selenium驱动程序适当地设置窗口大小后,这个问题就消失了。这里描述了webdriver API。