元素不可交互原因有多种,不同的原因有不同的解决方案。
原因1:点击速度过快,页面没有加载出来就需要点击页面上的元素
设置等待时间即可。
import time time.sleep(2)
原因2:需要定位的元素在页面中被隐藏了
比如:定位百度账号退出按钮,由于退出按钮被隐藏,只有当鼠标移动到用户账号时,才显示出退出按钮

解决方法:添加鼠标悬浮定位功能
代码如下:
# 鼠标悬停
def hover(self,by,value):
element = self.findElement(by,value)
ActionChains(self.driver).move_to_element(element).perform()
# 通过不同的方式查找界面元素
def findElement(self,by,value):
if(by == "id"):
element = self.driver.find_element_by_id(value)
return element
elif(by == "name"):
element = self.driver.find_element_by_name(value)
return element
elif(by == "xpath"):
element = self.driver.find_element_by_xpath(value)
return element
elif(by == "classname"):
element = self.driver.find_element_by_class_name(value)
return element
elif(by == "css"):
element = self.driver.find_element_by_css_selector(value)
return element
elif(by == "link_text"):
element = self.driver.find_element_by_link_text(value)
return element
else:
print("无对应方法,请检查")
return None
# 检查是否存在用户退出按钮,存在,登录成功,否则登录失败
self.driver.hover(by='xpath',value='//*[@id="s_username_top"]/span')
close = self.driver.findElement(by='xpath',value='//[@id="s_user_name_menu"]/div/a[4]')
print(close)
if close != None:
self.assertEqual(1,1)
else:
self.assertEqual(1,0)
time.sleep(3)
原因3:需要定位的元素的位置在变化
比如:某项目登录功能密码输入框的id、xpath在变
打开显示如下图

密码输入显示如下图

代码首先先点击密码输入框,再执行输入操作
driver.find_element_by_id("cPwdMsg_0").click()
driver.find_element_by_id("passwd").send_keys("123456")
参考:
selenium定位:出现Message: element not interactable 元素不可交互的问题解决方案