WebDriver - 元素不可点击Chrome

Sow*_*arz 11 c# selenium google-chrome saucelabs selenium-webdriver

我有以下问题.我在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)
Run Code Online (Sandbox Code Playgroud)

我以同样的方式在两个测试中通过唯一的css选择器选择元素:

driver.FindElement(By.CssSelector("button.btn-xs:nth-child(1)")).Click();
Run Code Online (Sandbox Code Playgroud)

任何想法在这里有什么不对?

bit*_*bit 15

我假设你有你需要的正确元素,即XPath是正确的.以下是几种方法:

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

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

另一个

  1. 做一个.SendKeys(Keys.Enter)该元素(或空格键)上


eko*_*nov 7

由于您已将问题标记为Google-Chrome,我认为这种情况主要发生在ChromeDriver上.我之前的一个项目(Asp .Net MVC)遇到了同样的问题.我发现如果这些驱动程序不在screen_visible_area中,则该驱动程序看不到某些元素.请注意,它们已正确加载(HTML,CSS3,JS等).

因此,大量的阅读和测试后,我发现我的解决办法简单地滚动到WebElement -因此它在屏幕的可见部分.实际上这个问题不适用于所有元素,我没有找到更好的解决方案.

unknown error: Element is not clickable at point (..., ...) 
Run Code Online (Sandbox Code Playgroud)

对于这种情况不是描述性错误,因为和你一样,我也认为这与Selector有关.

只是为了得到完整答案 - 我也遇到了与IEDriver相同的问题.我的实现是使用浏览器向下滚动/向上选项,只是"发送屏幕"有问题的元素.

您可以使用的简单JSExecutor代码:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(110,350)", "");
Run Code Online (Sandbox Code Playgroud)

要么

jse.executeScript("scroll(0, 250);");
Run Code Online (Sandbox Code Playgroud)

要么

driver.executeScript("window.scrollBy(110,350)", "");
Run Code Online (Sandbox Code Playgroud)

其他与主题相关的有用资源在这里.

更新

说到.sendKeys()我还使用了浏览器辅助功能.您需要做的就是计算您的测试需要多少TAB点击才能到达目标web_element.然后打电话.click().

试试这个简单的代码:

element.sendKeys(Keys.TAB);
Run Code Online (Sandbox Code Playgroud)

要么

element.sendKeys("\t")
Run Code Online (Sandbox Code Playgroud)

要么

Actions builder = new Actions(driver);
builder.keyDown(Keys.TAB).perform()
Run Code Online (Sandbox Code Playgroud)