一. StaleElementReferenceException:
- 原因:引用的元素已過期。原因是頁面刷新了,此時當然找不到之前頁面的元素。- 解決方案:不確定什么時候元素就會被刷新。頁面刷新后重新獲取元素的思路不變,這時可以使用python的異常處理語句:try…except…,異常出現時重新執行,關鍵代碼如下
編寫腳本時使用異常try捕獲異常后,頁面刷新后重新獲取元素,可以成功找到元素了:
二. ElementClickInterceptedException
- 原因:元素定位相互覆蓋,元素已經找到,但是無法點擊- 解決方案:方法一:使用強制等待,但是每次都有類似的元素無法點擊使用強制等待的話會延長腳本執行時間
time.sleep()
注意??:之前便遇到過很多次該問題的報錯,就沒有管它,但是隨著越來越多的元素報該錯,每次使用強制等待會大大延長腳本的執行時間。方法二:顯性等待
如下是顯示等待的用法和區別
1. element_to_be_clickable--元素是否可點擊
2. vibility of element_ located--元素是否可見
3. presence_of_element_located--元素是否存在
如上:三種等待方法,最開始我一直使用的是presence_of_element_located,判斷元素是否存在;
最終還是報錯,提示元素元素點擊攔截異常。
element_to_be_clickable--等待元素出現可以點擊,便可以元素定位成功方法三:使用JS點擊
然而有時即使已經顯式等待了,卻仍然會報錯: ElementClickInterceptedException,這多少
有點奇怪。為什么 webdriver 有時就是無法點擊,我不知道,也許這和他首先執行的一些驗證檢查有關,
反正就在這一刻,它不給你點。
方法三的代碼如下:
三. NoSuchElementException:
原因:- 前端出現變更,導致定位不到元素;- 頁面未加載出來元素導致元素找不到,需要加個等待;- 定位語法錯誤;- 元素可能在新的Windows窗口,此時需要切換Windows;- 頁面出現偽元素:顯示的是::before、::after這類的元素,被偽元素包裹起來的元素經常會定位不到,此時就需要對偽元素進行處理了,解決方式如:http://testingpai.com/article/1638176966906
四.NoSuchWindowException:
- 沒找到窗口句柄handle(瀏覽器版本與驅動不兼容)- 注意??:Web自動化中存在哪三種切換:1. windows窗口切換:切換到要操作的窗口;2. alert彈出框操作;3. iframe切換。操作方式如:https://blog.csdn.net/wsy_666/article/details/132325473
五.TimeoutException:
查找元素超時
六. NoSuchAttributeException:
屬性錯誤
六. ElementNotSelectableException:
元素沒有被選中