元素不可交互原因有多种,不同的原因有不同的解决方案。
原因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 元素不可交互的问题解决方案