目錄
元素不能定位總結:
1、定位語法錯誤:
定位語法錯誤,如無效的xpath,css selector,dom路徑錯誤,動態dom
定位語法錯誤,動態路徑(動態變化)
定位策略錯誤,如dom沒有id用id定位當然定位,使用dom中不存在的屬性定位
解決辦法:
2、元素未顯示
等待時間不夠
解決辦法:
元素隱藏在其他元素下(如列表選項,二級窗口),需要交互才展示
解決辦法:
3、元素在dom中存在多個,未使用正確的查找方法
解決辦法:
解決辦法:
4、selenium自身問題:
解決辦法:
5、元素不在當前視覺范圍
解決辦法:
6、其他原因
網絡異常
瀏覽器窗口異常關閉
網站后臺異常頁面無法加載
元素不能定位總結:
1、定位語法錯誤:
-
定位語法錯誤,如無效的xpath,css selector,dom路徑錯誤,動態dom
-
定位語法錯誤,動態路徑(動態變化)
-
定位策略錯誤,如dom沒有id用id定位當然定位,使用dom中不存在的屬性定位
解決辦法:
建議編碼時現在瀏覽器調試模式下使用編寫的xpath、css selector?在待測頁面定位一下,看能不能識別到元素
2、元素未顯示
-
等待時間不夠
一些頁面需要加載的資源比較多:如圖片、樣式、js動態文件等,因此如果頁面沒有加載完的話,有些元素是不會顯示的,也定位不到
解決辦法:
使用webdriverwait +顯性條件來增加等待時間
WebDriverWait(self.driver, 15).until(EC.visibility_of_all_elements_located(loc))
常見的顯性條件如下:
visibility_of_all_elements_located
用于檢查的DOM上是否存在所有元素的期望頁面并可見。可見性意味著元素不僅
顯示,但也具有大于0的高度和寬度。定位器-用于查找元素一旦找到并可見WebElement,就返回其列表
text_to_be_present_in_element
檢查給定文本是否存在于指定的元素。定位器,文本
invisibility_of_element_located
檢查元素是否不可見的期望出現在DOM上。用于查找元素的定位器
number_of_windows_to_be
期望窗口數為某個值
-
元素隱藏在其他元素下(如列表選項,二級窗口),需要交互才展示
一些元素隱藏在另外一些組件下面,如列表組件中的選項,窗口組件中的文字、按鈕等
解決辦法:
等其他條件滿足再操作
3、元素在dom中存在多個,未使用正確的查找方法
例如定位語法在頁面定位到多個元素未使用find_elements而是用find_element,find_element默認查找第一個就返回因此可能查不到想要查找的元素。這種情況如果要交互的元素不是第一個就會報異常了。
解決辦法:
使用find_elements定位多個元素
另外還有可能查找第一個dom在頁面沒有顯示,這種情況是dom能找到,但是這個元素沒有在頁面展示。什么意思呢?就是說是個偽元素,這個元素在頁面是沒有寬度和高度的因此也會報錯。這種情況可以使用顯性條件(excepted condition)“visibility_of_element_located”來查找,它表示元素的長寬不為0,保證元素在頁面是存在的。
解決辦法:
使用顯性條件避免定位到偽元素
4、selenium自身問題:
如圖表元素(canvas,svg),由于圖表元素是使用js繪制的,對selenium來說相當于一張圖片,所以使用dom定位不到
解決辦法:
借助第三方庫或者圖形識別來處理
5、元素不在當前視覺范圍
待操作元素在其他windows、frame、iframe、alert等
解決辦法:
這個時候需要需要切換到新窗口、frame、iframe、alert才能定位到。
6、其他原因
網絡異常
有些時候網絡連接異常會導致頁面未加載成功,故而無法操作頁面
瀏覽器窗口異常關閉
測試清理使用了driver.close()關閉了窗口,導致后面的會話異常無法執行后續測試
網站后臺異常頁面無法加載
例如應用發版部署中,應用未完全啟動,故而無法查找頁面元素