selenium工具之解决元素不可交互 (element not interactable)/元素被拦截(element click intercepted)

前言

在做UI自动化测试进行元素点击操作时会产生异常 element not interactable (元素不可交互/)。

把自己遇到的这种情况总结一下,下次避一下坑。

出现元素不可交互原因可能有:

1、点击事件太快,元素还未加载出来,可以在UI操作之前添加等待时间等待元素完全加载出来后在进行点击操作;

2、元素不在页面上,比如下图某元素有 hidden 属性,需要利用JS语句先去掉这个属性再操作(在自动化测试中一般不建议改变原生页面元素属性行为);(元素隐藏:可以在页面上定位到该元素,但是该元素无法点击)

[该元素存在于DOM树中但是该元素于页面上不可见],故该元素不可以执行点击操作。

3、元素定位错误。例如已定位到的某元素不可点击;已定位到的某元素是一个button可点击按钮,在代码中却对其进行input输入框的 send_keys 操作。

4、元素存在于页面DOM树中并且在页面上可见,但是却无法直接对该元素进行点击,因为元素需要进行某些操作之后才可以点击,否则就可能造成点击页面非预期元素的后果。

如下图:通过点击打开时间选择框后,如果不进行<滑动时间下拉框的滑轮操作>或者不<将鼠标移动到指定元素的操作>(这种情况是元素已经在页面上全部加载出来),则会点击到页面白板上面而造成抛出异常:元素不可交互。

5、元素在点击的时候被其他元素遮挡,也会抛出异常:元素不可交互。

如下图:

6、对于JavaScript动态加载的网页,遇到 Message: element click intercepted: Element is not clickable at point(xx, xx). Other element would receive the click: 此类异常,不能够在执行ui代码之前去等待元素加载(此方法一般网页都能够达到)或者使用 driver.refresh() 刷新网页等目的是加载元素的操作;

解决办法①:

button = driver.find_element_by_xpath('//*[@id="root"]/div/div/div[1]/div/div/div[3]/div/div/div[2]/div[3]/div/div/div[2]/input')
driver.execute_script(
"$(arguments[0]).click()",button)

解决办法②:

button = driver.find_element_by_xpath('//*[@id="root"]/div/div/div[1]/div/div/div[3]/div/div/div[2]/div[3]/div/div/div[2]/input')

webdriver.ActionChains(driver).move_to_element(button).click(button).perform()

 

posted @   习久性成  阅读(13976)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2021-05-12 Linux常用命令
2021-05-12 H5测试点
2021-05-12 小程序之测试点详细刨析
点击右上角即可分享
微信分享提示