元素不可交互原因有多種,不同的原因有不同的解決方案。
原因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")