【问题标题】:python + selenium button in div overlay clickable in testing but not when automateddiv覆盖中的python + selenium按钮在测试中可点击,但在自动化时不可点击
【发布时间】:2017-09-12 14:00:18
【问题描述】:
<div class="t-window-content t-content" style="overflow: auto; width: 400px; height: 389.4px;">
    <div id="frmSchTarget">
        <form action="/Search/SearchTypePreName"
            method="post" onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));"
            onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, onBegin: Function.createDelegate(this, PreNameListWindow), onSuccess: Function.createDelegate(this, Form_OnSuccess) });"><input type="hidden" id="NameList"
                name="NameList">
            <div style="text-align: left; padding-left: 10px">
                <span style="margin-right: 20px;">
        <button id="TreeViewButtonCollapse" name="TreeViewButtonCollapse" onclick="ExpandCollapseTreeView('NameListTreeView', false); return false;" title="Collapse All">
            <img src="/Content/Images/toggle_up.png">
        </button>
        <button id="TreeViewButtonExpand" name="TreeViewButtonExpand" onclick="ExpandCollapseTreeView('NameListTreeView', true); return false;" title="Expand All">
            <img src="/Content/Images/toggle_down.png">
        </button>
    </span>
            </div>
            <div id="divSelectNamesArea" style="height: 325px; overflow: auto;">
                "i removed a very large list from here"
            </div>
            <hr class="PopupLineStyle">
            <div style="text-align: left; padding-left: 10px">
                <span style="margin-right: 20px;"><input type="checkbox" id="Checkbox1" name="SelectAllPrenamesToggle" onclick="SelectAllOrNoneInTreeView('NameListTreeView', this.checked);">
    All / None</span>
                <input type="submit" class="t-button" value="Done"
                    onclick="GetNameListString('NameListTreeView');">
            </div>
        </form>
    </div>
</div>

上面的代码基本上已经困扰我大约一个星期了。我正在尝试运行 webscraper,并在提交请求后,页面上会出现一个 div 覆盖。上面的代码 sn-p 显示了用于摆脱它的“完成”按钮是如何实现的。

在测试中我可以使用

buttons = driver.find_elements_by_xpath('//input[contains(@class,"t-button")]')

要找到所有存在的按钮,然后是按钮 [5],但是一旦我自动化它就不起作用了。

我还尝试使用以下 xpath 进行隐式等待:

//*[@id="frmSchTarget"]/form/div[3]/input

这也是不行的。请帮忙,我已经尝试了一个多星期以来通过stackoverflow搜索的所有内容。我就是想不通。

【问题讨论】:

  • 没有什么会突然出现在我身上,需要隐式等待。可以提供网址吗?
  • 尝试更具体的选择器。一个有用的特性是 Chrome 的 CSS 选择器生成器。在 Chrome Inspector 中,右键单击所需的元素 >> 复制 >> 复制选择器

标签: python html css selenium


【解决方案1】:

//点击按钮前等待15s进行调试,以防点击按钮之前
// 在页面上渲染出来

time.sleep(15)

button_done = driver.find_element_by_css_selector("#frmSchTarget input[value='Done']")

button_done.click()

如果上面的代码可以工作,去掉time.sleep()然后重新运行,如果失败,这意味着 您需要稍等片刻才能点击它,请使用显式等待替换 time.sleep()

【讨论】:

  • edit 抱歉,忘了放 click() 方法。这完美地工作。谢谢。
  • 请在官方脚本中将 sleep() 替换为显式等待
  • &lt;div class="t-widget t-window" id="NamesWin" style="visibility: visible; top: 240px; left: 305px; z-index: 10029; display: block;"&gt; &lt;div class="t-window-titlebar t-header"&gt;&amp;nbsp;&lt;span class="t-window-title"&gt;Select Names:&lt;/span&gt; &lt;div class="t-window-actions t-header"&gt;&lt;a class="t-link" href=""&gt;&lt;span class="t-icon t-close"&gt;Close&lt;/span&gt;&lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;div class="t-window-content t-content" style="overflow: auto; width: 400px; height: 385.4px;"&gt; &lt;div id="frmSchTarget"&gt;No names found. Try again.&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;如何关闭按钮?
  • button_close = driver.find_element_by_css_selector("#NamesWin .t-close")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 2021-10-18
  • 2021-04-08
  • 2017-11-01
相关资源
最近更新 更多