python-2.7 - 可见VUE输入框的Selenium“消息:元素不可交互”
问题描述
我有一个由 VUE 生成的 HTML 页面。页面元素如下:
<input name="" id="newTvAdvertiserSelected" type="text" autocomplete="nope" placeholder="" tabindex="0" class="multiselect__input" style="width: 0px; position: absolute; padding: 0px;">
然后我有如下的 Selenium 代码来单击它。
driver.find_element_by_id("newTvAdvertiserSelected").click()
如果我手动单击它,它可以工作。我也可以在框中手动输入。但是,它不接受 Selenium 点击也不接受“send_keys”。我收到此错误“消息:元素不可交互”。
该脚本还为页面等待了 5 秒,我可以看到页面上的所有元素。所以我认为脚本已经等待了足够长的时间来加载所有元素。
VUE input 和 class="multiselect__input" 需要一些特殊处理吗?
这个 VUE 组件是“输入”和“选择”的组合。当我输入内容时,它会自动填充下拉列表。然后我必须从下拉列表中“选择”。
该部分的 HTML 如下:
<!---->
<div class="el-form-item__content">
<div tabindex="-1" class="multiselect" style="">
<div class="multiselect__select"></div>
<div class="multiselect__tags">
<div class="multiselect__tags-wrap" style="display: none;"></div>
<!---->
<div class="multiselect__spinner" style="display: none;"></div>
<input name="" id="newTvAdvertiserSelected" type="text" autocomplete="nope" placeholder="" tabindex="0" class="multiselect__input" style="width: 0px; position: absolute; padding: 0px;">
<span class="multiselect__single">Just typed in COmpany Name X</span> <!----></div>
<div tabindex="-1" class="multiselect__content-wrapper" style="max-height: 300px; display: none;">
<ul class="multiselect__content" style="display: inline-block;"> <!---->
<li class="multiselect__element">
<span data-select="" data-selected="" data-deselect="" class="multiselect__option multiselect__option--highlight"><span>Company name A</span></span> <!----></li>
<li class="multiselect__element"><span data-select="" data-selected="" data-deselect="" class="multiselect__option"><span>Company name B</span></span> <!----></li>
<li class="multiselect__element"><span data-select="" data-selected="" data-deselect="" class="multiselect__option"><span>Company name C</span></span> <!----></li>
<li style="display: none;"><span class="multiselect__option">
<span>No Data</span>
</span>
</li>
<li style="display: none;"><span class="multiselect__option">List is empty.</span></li>
</ul>
</div>
</div>
<!---->
</div>
</div>```
解决方案
谢谢@DebanjanB、@KunduK 和@PDHide。使用 JS 执行工作。代码如下:
driver.execute_script("arguments[0].click();arguments[0].dispatchEvent(new Event('focus')); arguments[0].value = 'XXX'; setTimeout(1000); arguments[0].dispatchEvent(new Event('input'))", driver.find_element_by_id("newTvAdvertiserSelected"))
推荐阅读
- python - Python 服务器可以跨 Apache 工作人员缓存数据库查询吗?
- python - 如何以不规则的间隔切片列表?
- wordpress - 如何解决flutter wordpress json api错误?
- node.js - 如何让 Firebase Functions 充当用户而不是管理员?
- css - 没有类噩梦的内联 CSS
- excel-formula - 如果单元格为空,日期公式返回空白
- javascript - 在 JavaScript 中更改滑块范围拇指的高度
- firebase - Firestore 安全规则多个 get() 未按预期工作
- html - 当父容器高度固定时,如何使 Flexbox flex-column 内容不被压缩?
- r - 使用 data.table 按组对数据进行 Winsorize