代碼報錯解析


一, AttributeError: 'NoneType' object has no attribute 'click' 出現原因,解決辦法

AttributeError: 'NoneType' object has no attribute 'click'這句話的意思是元素沒有點擊的這個屬性。同理,AttributeError: 'NoneType' object has no attribute 'send_keys()’,是沒有輸入值的屬性。

當python代碼出現這種問題時,一般有2種情況。

一是沒有找到這個元素,比如你想在設置中點擊“語言和輸入法”,但沒定位到這個元素。在page頁面中,你定義的方法沒錯,通過id,xpath,等方法找元素也沒錯。死活找不出原因時,報錯的原因是uiautomatorviewer未掃描到控件。比如掃描的是第一屏,你的元素需要滑到第三屏才出現。在第一屏找不到你的元素所以會報錯。這是第一種情況。

第二種情況是元素確實被uiautomatorviewer掃描到。但還報錯,說明這個元素真沒這個屬性。但這種機率很小,因為你不會給按鈕加清空操作,給文本框加點擊操作。

 

 以上個圖片為例,錯誤原因是第一種,通過find_ele_ById_And_content方法找不到元素。解決思路:可在base_action.py文件中找到你定義的這個方法,

def find_ele_ById_And_content(self, loc, content):
list = self.driver.find_elements(By.ID,loc[1])
for i in list:
if i.get_attribute('text') == content:
return i
這行代碼正確,那么我們就一步步print,如果哪一步不print,則哪一行出錯,
def find_ele_ById_And_content(self, loc, content):
list = self.driver.find_elements(By.ID,loc[1])
print('方法執行到這了')
print(len(list)) #這行和上一行是檢查list的長度,print(list)是list的內容。要上一行的目的是方便看你打印這行的位置
for i in list:
t1 = i.get_attribute('text')
print(t1) #打印list里元素的屬性text
if t1 == content:
print(i) #打印元素
return i
這是一種思路,用這種方法還是解決不了。元素未顯示的解決辦法是在base_action里封裝一個滑屏找元素,如果找到就返回這個元素,這個元素在page里進行操作,
如點擊,輸入等操作。如果向上滑到頁面最底部,向下滑到頁面最頂部,向左滑到最右部,向右滑到最左部還找不到,就報錯。
在下一篇博客封裝滑屏操作。
二,TimeoutException

TimeoutException超時錯誤,即沒找到元素。

三,UnicodeDecodeError: 'gbk' codec can't decode byte 0xa5 in position 59: illegal multibyte sequence

f = open('文件地址','r',encoding='UTF-8')
f.read()
這樣就可以讀取出來了

比如

 

import yaml

def main():

with open('./data.yml', 'r', encoding='UTF-8') as f:
data = yaml.load(f)
print(type(data))
print(data)

if __name__ == '__main__':
main()

 

代碼提示單詞

AttributeError:  屬性錯誤,

NameError:試圖訪問的變量名不存在

SyntaxError:語法錯誤,代碼形式錯誤

Exception:所有異常的基類,因為所有python異常類都是基類Exception的其中一員,異常都是從基類Exception繼承的,並且都在exceptions模塊中定義。

IOError:一般常見於打開不存在文件時會引發IOError錯誤,也可以解理為輸出輸入錯誤

KeyError:使用了映射中不存在的關鍵字(鍵)時引發的關鍵字錯誤

IndexError:索引錯誤,使用的索引不存在,常索引超出序列范圍,什么是索引

TypeError:類型錯誤,內建操作或是函數應於在了錯誤類型的對象時會引發類型錯誤

ZeroDivisonError:除數為0,在用除法操作時,第二個參數為0時引發了該錯誤

ValueError:值錯誤,傳給對象的參數類型不正確,像是給int()函數傳入了字符串數據類型的參數。

 


免責聲明!

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



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