我有一个网络应用程序,我正在尝试编写selenium测试,我遇到了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>
答案 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