WebDriver – 元素不可点击Chrome
我有以下问题。 我在Firefox和Chrome上运行测试。 在Firefox测试运行正确,但在Chrome SauceLabs上给出一条消息:
unknown error: Element is not clickable at point (717, 657). Other element would receive the click: ... (Session info: chrome=36.0.1985.125) (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.3 x86_64)
我以同样的方式在两个测试中通过唯一的css选择器选择元素:
driver.FindElement(By.CssSelector("button.btn-xs:nth-child(1)")).Click();
任何想法在这里有什么问题?
我假设你有你需要的正确元素,即XPath是正确的。 以下是几种方法:
- 尝试单击
parent element
。 - 试试。
Submit()
而不是.Click()
- 尝试执行将在您尝试单击的元素的
OnClick
事件上执行的JavaScript
。
我一直使用第三种方式取得成功。
另一个
- 在该元素(或空格键)上执行
.SendKeys(Keys.Enter)
)
既然您已将问题标记为Google-Chrome ,我认为这种情况主要发生在ChromeDriver上 。 我之前的一个项目(Asp .Net MVC)遇到了同样的问题。 我发现当这个驱动程序的某些元素不在 screen_visible_area中时,它们是不可见的。 请注意它们已正确加载(HTML,CSS3,JS等)。
经过大量的阅读和测试后,我发现我的解决方法 只是滚动到WebElement – 因此它位于屏幕的可见部分。 实际上这个问题不适用于所有元素,我没有找到更好的解决方案。
unknown error: Element is not clickable at point (..., ...)
对于这种情况不是描述性错误,因为和你一样,我也认为这与Selector有关 。
只是为了得到完整答案 – 我也遇到了与IEDriver相同的问题。 我的实现是使用浏览器向下滚动/向上选项,只是“发送屏幕”有问题的元素。
您可以使用的简单JSExecutor代码:
WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollBy(110,350)", "");
要么
jse.executeScript("scroll(0, 250);");
要么
driver.executeScript("window.scrollBy(110,350)", "");
其他与主题相关的有用资源在这里 。
更新
说到.sendKeys()
我还使用了浏览器辅助function 。 您需要做的就是计算您的测试需要多少TAB点击才能到达目标web_element。 然后只需调用.click()
。
试试这个简单的代码:
element.sendKeys(Keys.TAB);
要么
element.sendKeys("\t")
要么
Actions builder = new Actions(driver); builder.keyDown(Keys.TAB).perform()
我意识到这是一个非常古老的问题,但是在今天搜索一个几乎相同的问题时出现了。 在尝试了这里描述的许多修复并为我的麻烦(主要是陈旧的元素和http请求超时)获得新的exception后,我在Selenium的GitHub上偶然发现了这个问题 。
正如post中所描述的,Chrome已经超越了我的chromedriver.exe版本的function – 我的v2.30驱动程序由于Chrome v61滚动机制的更改而点击了元素已知问题。 更新到最新的chromedriver.exe解决了我所有的问题。
tl / dr:确保您的chromedriver版本与正在测试的Chrome版本兼容。
如果你在CSS中做了任何复杂的事情,Chrome就会感到困惑(这发生在我身上),并认为你试图点击的元素被另一个元素覆盖,即使事实并非如此。
解决此问题的一种方法是通过添加z索引(您还需要添加相对或绝对定位)来帮助Chrome正确理解这种情况,以明确地将正确的元素放在另一个上面。
对我来说,它正在创建此命令。
driver.FindElementByXPath("id('gender1')").SendKeys(Keys.Space);
就我而言,我正在与无线电控制进行互动。
我在FF上遇到过这个问题。 当您的字段不在视图区域时,会发生此问题。 解决此问题的方法是缩小浏览器:
TheNotClickableField.SendKeys(Keys.Control +“ – ”+“ – ”);
您可能希望根据页面大小或多或少缩小。
I.如果按钮位于页面底部,则可以使用以下代码通过JavaScript从底部执行点击:
(作为IJavaScriptExecutor的驱动程序).ExecuteJavaScript(“window.scrollTo(0,document.body.scrollHeight – 150)”);
可以通过C#使用Selenium提供的Actions类完成相同的操作。 这将使您到页面底部—–>
new Actions(Driver).SendKeys(Keys.End).Perform();
Keys.End可以使用Keys.PageDown // Keys.Space切换
II。 如果您想要到达元素的确切位置,您可以:
1.获取元素的Y位置—> var elementToClick = driver.findElement(By。{Anything}(“”));
2.执行以下JS -–> (驱动程序为IJavaScriptExecutor).ExecuteScript(string.Format(“window.scrollTo(0,{0})”,elementToClickYLocation.Location.Y));
3.单击元素—> elementToClick.click();