我只在Chrome浏览器中看到这个。
完整的错误信息如下:
“org.openqa.selenium。WebDriverException:元素在点(411,675)不可点击。其他元素会收到点击:……”
“将接收点击”的元素位于相关元素的一侧,而不是在元素的顶部,也没有重叠,也没有在页面上移动。
我试过加一个偏移量,但也不行。该项目在显示的窗口上,不需要滚动。
我只在Chrome浏览器中看到这个。
完整的错误信息如下:
“org.openqa.selenium。WebDriverException:元素在点(411,675)不可点击。其他元素会收到点击:……”
“将接收点击”的元素位于相关元素的一侧,而不是在元素的顶部,也没有重叠,也没有在页面上移动。
我试过加一个偏移量,但也不行。该项目在显示的窗口上,不需要滚动。
当前回答
错误信息解释:
错误消息只是说,您想要单击的元素存在,但它不可见。它可能被什么东西覆盖,或者暂时看不见。
元素在测试时不可见的原因有很多。请重新分析您的页面,并为您的情况找到合适的解决方案。
特殊情况的解决方案:
在我的例子中,当我刚刚点击的屏幕元素的工具提示出现在我想要点击的下一步元素上时,就发生了这个错误。离焦是我需要的解决方案。
快速解决散焦的方法是点击屏幕另一部分的其他元素,这些元素“没有”反应。点击动作后什么都不会发生。 正确的解决方案是在弹出工具提示的元素上调用element.blur(),这将使工具提示消失。
其他回答
您需要在该元素上使用焦点或滚动。您可能还必须使用显式等待。
WebElement firstbutton= driver.findElement(By.xpath("Your Element"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();
OR
元素是不可点击的,因为它上面有一个旋转/覆盖:
By loadingImage = By.id("loading image ID");
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
wait.until(ExpectedConditions.invisibilityOfElementLocated(loadingImage));
OR
Point p= element.getLocation();
Actions actions = new Actions(driver);
actions.moveToElement(element).movebyoffset(p.x,p.y).click().perform();
OR
如果仍然不能工作,请使用JavascriptExecutor
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", firstbutton);
当我试图单击页面上的单选按钮时,我遇到了同样的异常。我使用下面的Javascript并使用IJavaScriptExecutor执行。 c#示例
string script=" function clickCharity() {"+
"var InputElements = document.getElementsByName('Charity');"+
"for (i=0; i<InputElements.length; i++){"+
"if(InputElements[i].getAttribute('value') == 'true')"+
"{"+
"InputElements[i].click();"+
"}"+
"}"+
"}";
var js=WebDriver as IJavaScriptExecutor;
js.ExecuteScript(script);
也许这不是一个干净的解决方案,但它是有效的:
try:
el.click()
except WebDriverException as e:
if 'Element is not clickable at point' in e.msg:
self.browser.execute_script(
'$("{sel}").click()'.format(sel=el_selector)
)
else:
raise
在我的例子中,它在Firefox中运行正常,但在Chrome中失败了。在Chrome中,在更新Chrome驱动程序版本到最新版本后,该问题得到了修复。
有趣的是,我花了这么多时间研究各种各样的答案,没有人尝试过显而易见的答案,当然,我也没有。如果您的页面多次使用相同的id,就像我的页面一样("newButton",),而您想要的id不是第一个找到的,那么您很可能会得到这个错误。最简单的事情(c#):
var testIt = driver.FindElements(By.Id("newButton"));
注意它是FindElements,而不是FindElement。
然后测试从检索中得到了多少结果。如果是第二个,你可以使用:
testit[1].Click();
或者让那些重复使用id的人来修复它们。