我有以下问题。我在Firefox和Chrome上运行测试。在Firefox测试运行正确但Chrome SauceLabs上给出了一条消息:
unknown error: Element is not clickable at point (717, 657). Other
element would receive the click: <div class="col-md-9 col-sm-12"
style="margin-top:8px;">...</div> (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();
这里有什么问题吗?
答案 0 :(得分:15)
我假设您拥有所需的正确元素,即XPath是正确的。 以下是几种方法:
parent element
代替。Submit()
代替.Click()
JavaScript
事件上执行的OnClick
。我一直使用第三种方式取得成功。
另一个
.SendKeys(Keys.Enter)
答案 1 :(得分:7)
由于您已将问题标记为 Google-Chrome ,我认为这种情况主要发生在 ChromeDriver 上。我之前的一个项目(Asp .Net MVC)遇到了同样的问题。我发现当此驱动程序的某些元素不可见时,如果它们不在 screen_visible_area 中。请注意正确加载它们(HTML,CSS3,JS等)。
经过大量的阅读和测试后,我发现我的解决方法 只是滚动到WebElement - 所以它在屏幕的可见部分。实际上这个问题不适用于所有元素,我也没有找到更好的解决方案。
unknown error: Element is not clickable at point (..., ...)
对于这种情况不是描述性错误,因为和我一样,我也认为这是与 Selector相关的。
只是为了完整答案 - 我也遇到了与 IEDriver 相同的问题。我的实现是使用浏览器向下滚动/向上选项,只是&#34;发送屏幕&#34;问题元素在哪里。
您可以使用的简单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)", "");
其他与主题相关的useful resources are here。
<强> 更新 强>
说到.sendKeys()
,我还使用了browser accessibility features。您需要做的只是计算有多少 TAB 点击您的测试需求才能到达目标web_element。然后拨打.click()
。
试试这个简单的代码:
element.sendKeys(Keys.TAB);
或
element.sendKeys("\t")
或
Actions builder = new Actions(driver);
builder.keyDown(Keys.TAB).perform()
答案 2 :(得分:1)
我意识到这是一个非常古老的问题,但是在今天搜索一个几乎相同的问题时出现了。在尝试了这里描述的许多修复并为我的麻烦(主要是陈旧的元素和http请求超时)获得新的异常后,我在Selenium的GitHub上偶然发现了this issue。
正如帖子中所描述的,Chrome已经超越了我的chromedriver.exe版本的功能 - 我的v2.30驱动程序由于Chrome v61滚动机制的更改而点击了元素已知问题。 Updating to the latest chromedriver.exe解决了我所有的问题。
tl / dr:确保您的chromedriver版本与正在测试的Chrome版本兼容。
答案 3 :(得分:0)
如果您在CSS中执行任何复杂操作,Chrome可能会感到困惑(这种情况发生在我身上),并认为您尝试单击的元素会被其他元素覆盖,即使情况并非如此。< / p>
解决此问题的一种方法是帮助Chrome通过添加z-index(您还需要添加相对或绝对定位)来正确理解这种情况,以明确地将正确的元素放在另一个上面。
答案 4 :(得分:0)
对我来说,它正在创建此命令。
driver.FindElementByXPath("id('gender1')").SendKeys(Keys.Space);
就我而言,我正在与无线电控制进行互动。
答案 5 :(得分:0)
我在FF上遇到过这个问题。当您的字段不在视图区域时,会发生此问题。解决此问题的方法是缩小浏览器:
TheNotClickableField.SendKeys(Keys.Control +&#34; - &#34; +&#34; - &#34;);
您可能希望根据页面大小或多或少缩小。
答案 6 :(得分:0)
我遇到问题,即使xpath正确,登录按钮在chrome中也无法单击。浏览了许多站点之后,我想到了解决方案-使用 .submit()而不是.click(),它运行良好。
driver.findElement(By.xpath("//button[@id='loginBtn']")).click();
driver.findElement(By.xpath("//button[@id='loginBtn']")).submit();
答案 7 :(得分:-1)
<强>我强> 如果按钮位于页面底部,则可以使用以下代码通过JavaScript从中获取可以执行单击的位置:
(作为IJavaScriptExecutor的驱动程序).ExecuteJavaScript(&#34; window.scrollTo(0,document.body.scrollHeight - 150)&#34;);
可以通过C#使用Selenium提供的Actions类完成相同的操作。 这将使您到页面底部-----&gt;
new Actions(Driver).SendKeys(Keys.End).Perform();
Keys.End可以使用Keys.PageDown // Keys.Space
切换<强> II。强> 如果你想到达元素的确切位置,你可以:
1.获取元素的Y位置---&gt; var elementToClick = driver.findElement(By。{Anything}(&#34;&#34;));
2.执行以下JS ---&gt; (作为IJavaScriptExecutor的驱动程序).ExecuteScript(string.Format(&#34; window.scrollTo(0,{0})&#34 ;,elementToClickYLocation.Location.Y));
3.点击元素---&gt; elementToClick.click();