ChromeDriver - 可怕的“元素在点(x,y)处不可点击。其他元素将收到点击

时间:2013-06-18 14:59:38

标签: java selenium-webdriver selenium-chromedriver

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

enter image description here

问题是有一个巨大的div包含整个屏幕,而Chrome表示这个div会获得点击。那么,我该如何解决这个问题呢?这似乎不正确的行为,我不能单击此按钮,因为有一个周围的div标签。如果这是正确的行为,几乎没有任何东西可以点击。

enter image description here

我要点击的按钮是:

 <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>

4 个答案:

答案 0 :(得分:1)

有时开发人员使用全屏&#34; div&#34;跟踪操作,但Chrome webdriver无法在&#34; div&#34;显示在顶部。所以你可以使用&#34; z-index&#34;属性隐藏它。

C#中有一个例子: ((IJavaScriptExecutor)this.Driver).ExecuteScript(&#34; arguments [0] .setAttribute(&#39; style&#39;,&#39; z-index:-1&#39;)&#34;,弹出);

答案 1 :(得分:0)

尝试使用fire_event("click")代替click ...它帮助了我。

答案 2 :(得分:0)

有一个类似的问题[这里](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);

答案 3 :(得分:0)

我最近在这些案例(糟糕的网站设计)中使用的最后一个度假村是使用DOM的javascript修改:

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

有关更全面的问题排查,您可以先查看我对类似问题的回答,然后再解决一般情况:https://stackoverflow.com/a/23705280/234593