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()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 小程序之测试点详细刨析