【问题标题】:ChromeDriver -- The dreaded "Element is not clickable at point (x, y). Other element would receive the clickChromeDriver - 可怕的“元素在点 (x, y) 处不可点击。其他元素将收到点击
【发布时间】:2013-06-14 20:48:39
【问题描述】:

我有一个网络应用程序,我正在尝试为其编写硒测试,但我遇到了 Chrome 驱动程序的问题。有一个向导类型的界面,用户可以使用它来填写表格。有一个按钮可以添加带有几个设置的行。我已经用黑色概述了这一点。蓝色矩形显示按钮的可点击区域。这个矩形的中间没有与其他任何东西重叠。

问题是有一个巨大的 div 包含整个屏幕,Chrome 说这个 div 会获得点击。那么,我该如何解决呢?由于周围有一个 div 标签,因此我无法单击此按钮似乎不是正确的行为。如果这是正确的行为,几乎没有什么是可点击的。

我要点击的按钮是这样的:

 <button id="add-thisSetting" class="btn">Add This Setting</button>

周围的div是:

 <div class="application-tour-overlay"></div>

这是一个简短的 html 源代码:

<div id="editBase">
  <div class="edit-buttons application_edit_controls">
    <div id="thingamajigSettings" class="application_thingamajig_settings">
      <div id="thisSetting" class="application_thissetting application-tour-spotlit">
        <div class="control-title">This Setting
        </div>
        <div class="thisSetting-block">
          <div>
            <div class="scrolling-table" style="overflow-y: auto; overflow-x: hidden;">
              <div class="add-thisSetting-bar">
                <div class="btn-group pull-right">
                  <button id="add-thisSetting" class="btn">Add This Setting</button>
                  <button class="btn dropdown-toggle" data-toggle="dropdown">
                    <ul class="dropdown-menu">
                </div>
              </div>
            </div>
          </div>
          <div id="rulescontainer" class="application_rule_view">
            <div id="settings">
              <div class="edit-buttons application_edit_controls">
              </div>
            </div>
          </div>
          <div id="app_notify_manager" class="application_notify_manager">
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
<div class="identityOfMe-widget-ft"></div>
<div id="jstree-marker" style="display: none;"></div>
<div class="application_tour">
  <div class="application-tour-overlay"></div>

【问题讨论】:

  • div 周围的 HTML 是什么样的?它最初存在的原因是什么?听起来您正在与不良的开发实践作斗争。
  • 作为一种解决方法,您可以将 style="display:none" 属性传递给此 div。这是执行此操作的方法stackoverflow.com/a/8476765/1343698
  • 网页源代码如下所示:
  • 太长了。我已经编辑了问题并添加了 html 源代码。
  • 只是想知道您是否解决了这个问题?我遇到了同样的问题

标签: java selenium-webdriver selenium-chromedriver


【解决方案1】:

有时开发人员使用全屏“div”来跟踪操作,但当“div”显示在顶部时,Chrome 网络驱动程序无法点击任何内容。所以你可以使用“z-index”属性来隐藏它。

C#中有一个例子: ((IJavaScriptExecutor)this.Driver).ExecuteScript("arguments[0].setAttribute('style', 'z-index: -1')", popup);

【讨论】:

    【解决方案2】:

    尝试使用fire_event("click") 而不是click ...这对我有帮助。

    【讨论】:

      【解决方案3】:

      [这里] (Debugging "Element is not clickable at point" error) 有一个类似的问题,其中包含很多信息。我遇到了类似的问题,我无法单击模式上已经在 DOM 中但隐藏的按钮。尝试多次调用这个函数,看看你的按钮的位置是否从 JS 改变。

      public void PrintLocation()
      {
      Point point = driver.findElement(By.id("add-thisSetting")).getLocation();
      System.out.println("X="+point.x+"Y="+point.y");
      }
      

      如果是这种情况,那么您可以通过休眠直到按钮停止移动来修复它。

      Thread.sleep(500);
      

      【讨论】:

        【解决方案4】:

        在这种情况下(糟糕的网站设计),我最后的手段之一是诉诸 DOM 的 javascript 修改:

        driver.execute_script(<<-javascript)
          var overlay = document.getElementById("modal_overlay");
          overlay.parentNode.removeChild(overlay);
        javascript
        

        对于更彻底的故障排除,您可以查看我之前对一般情况的类似问题的回答:https://stackoverflow.com/a/23705280/234593

        【讨论】:

          猜你喜欢
          • 2017-11-27
          相关资源
          最近更新 更多