python - 可扩展元素通过单击自行关闭
问题描述
我有一个 div 有一个与之链接的均匀监听器。div 只需单击即可展开并显示更多按钮。我试图通过单击打开 div,然后单击暴露的按钮。但是当我执行测试时,div 会被点击,展开以显示其他按钮,然后自行折叠。但是,如果手动执行它只会在单击两次时崩溃。因此,当我尝试单击暴露的按钮时,找不到它,我得到:以下错误可互换。
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element
或者
Element is not clickable at point . Other element would receive the click
我猜可能附加的事件侦听器通过加载太快/太慢而在其中起作用。看起来其他元素与目标元素重叠。如何单击目标按钮。
我尝试在单击 div 和目标按钮之间给它 2 秒的睡眠时间,但似乎只要单击 div 元素,它就会同时展开和折叠。我可以看到它这样做。我也尝试使用以下代码:
driver.execute_script("arguments[0].click();", element)
这是html代码片段:
<div class="software-package-top" id="package2_toggle">
<div class="software-package-info">
<div class="software-package-name">
name </div>
<div class="software-package-version">
3.0.1 </div>
<div class="software-package-status">
<span class="software-package-enabled">Disabled</span> <span class="software-package-not-running">Not Running</span> </div>
</div>
<div class="software-package-arrow"></div>
</div>
<div class="software-package-details software-hidden" id="package2_controls" style="display: none;">
<div class="software-package-description">
</div>
<hr>
<div class="software-package-controls">
<input type="button" name="View Release Notes" value="View Release Notes" id="package2_viewReleaseNotes" data-package="releaseNotes">
<input type="button" name="View Runtime Log" value="View Runtime Log" id="package2_viewLog">
<script>
$(document).ready(function() {
$("#package2_viewLog").click(function() {viewLog("---", "---", "no")});
});
</script>
<script>
$(document).ready(function() {
$("#package2_enable").click(function() {appControl("---", "---", "enable", "no")});
});
</script>
<input type="button" name="Enable" value="Enable" id="package2_enable">
<input type="button" name="Uninstall" value="Uninstall" id="package2_uninstall">
<script>
$(document).ready(function() {
$("#package2_uninstall").click(function() {appControl("---", "---", "uninstall", "no")});
});
</script>
</div>
</div>
</div>
解决方案
所有这些错误消息...
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element
和
Element is not clickable at point . Other element would receive the click
...意味着您click()
甚至在JavaScript或AJAX调用完全呈现元素和完整的DOM Tree之前调用。
解决方案
您需要诱导WebDriverWait为所需element_to_be_clickable()
,如下所示:
WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, element_xpath))).click()
推荐阅读
- python - 删除 XML 标记外的字符
- bro - 是否可以使用 Zeek 检查 TCP 保留位?
- joomla - 如何从弹出窗口的菜单项中打开文章?
- sql - 两行的部分连接
- python - 无法加载 dynlib/dll (Pyintaller)
- python - 为什么无论我尝试什么,我都会不断收到此错误 TypeError: 'function' object is not subscriptable
- postgresql - 从源代码编译 postgresql
- c - gcc 错误消息:程序中出现杂散“\ XXX”
- c++ - 使用 libcurl、C++ 时 POST 请求失败
- qt - 如何将 (0,0) 设置为 QGraphicsScene 的左上角