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是正确的。 以下是几种方法:

  1. 尝试单击parent element
  2. 试试。 Submit()而不是.Click()
  3. 尝试执行将在您尝试单击的元素的OnClick事件上执行的JavaScript

我一直使用第三种方式取得成功。

另一个

  1. 在该元素(或空格键)上执行.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();