测试人社区

求助,selenium实践弹窗定位报错Message: element not interactable(元素不可交互)

需求:工作实践碰到一个弹窗定位问题,选择完待上传文件后需要点击“上传”按钮才可以上传到后台服务器
思路:前端小白看了代码,看起来不像是frame和alert,而是一个div的弹窗,所以直接使用ID测试可以在弹窗关闭和打开的情况下在console定位到唯一的元素



现象:为了验证能不能定位到,设置了死等和显式等待clickable,但是报错element not interactable(死等)和TimeoutException(显式等待)
element=(By.ID,‘upload-button’)
time.sleep(100)
self.driver.find_element(*element).click()
希望得到的帮助:遇到这种报错的解决思路是什么?我的思路是不是正确的?
在此先提前谢谢各位大佬~


这种报错还是蛮常见的,基本百度或者google就有答案啦

谢谢助教小姐姐,解决了,总要踩踩坑才长记性。我整理下把解决办法贴到回复了

踩坑1 定位时需明确弹窗是什么类型
常见的弹窗实现方式有 div弹窗iframe弹窗alert弹窗prompt弹窗confirm弹窗
因为我还没全部踩过坑,笔记不全,所以这里就只说这一次遇到的问题,其它的可以看思寒大大之前的视频。

self.driver.switch_to

解决办法
主贴中有说过,这是一个div的弹窗,所以直接使用最常用的元素定位方式即可。

upload_ele=(By.ID,'upload-button')
WebDriverWait(self.driver, 30).until(expected_conditions.element_to_be_clickable(upload_ele))
self.driver.find_element(*upload_ele).click()

踩坑2 查找元素时报超时,但是使用的元素定位方法能在浏览器console正确定位
报错如图


解决思路
1.console确定代码中超时的元素是不是对的,需能确定唯一值。
图片
2.查看driver驱动和浏览器版本是不是匹配的
我的驱动和大版本是匹配的,只不过电脑是64位,驱动是32位,刚开始怀疑是32位驱动不匹配。搜了chromediver官网也只有32位的,所以这种情况排除。
图片
3.换个浏览器驱动,切换成Firefox的geckodriver-v0.24.0-win64,重新执行脚本,case通过。

结论:脚本没有问题,怀疑是chromedriver_win32的问题,还没做深入研究。

:+1::+1::+1::+1::+1::+1::+1::+1::+1::+1: