selenium定位:出現Message: element not interactable 元素不可交互的問題解決方案


元素不可交互原因有多種,不同的原因有不同的解決方案。

原因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")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM