記錄自動化中遇到的一些錯誤及解決思路,會持續更新(根據個人情況不同,錯誤解決方法不同)
1、找不到元素,腳本報“NoSuchElementException:Unable to find element”,或者"定位到了,不能操作,點擊無效"
1) 首先查看自己的“屬性值”是否寫正確
2) 元素的標籤不唯一,默認找到第一個
3)向上查看,元素是否在frame或iframe框架中
4) 查看元素是否在新打開的頁面中,需要切換到新窗口
5) 換其它的定位方式:id/name/class name/tag name/link text/xpath/css selector
6) 檢查元素屬性是否是會變動的、是否是隱藏的
7)添加等待時間sleep(),implicitly_wait(),WebDriverWait(driver, 10, 1).until(定位的元素, messages)
8) 查看標籤的屬性是否有“style=’display:none’->。元素不顯示。屬性改爲block
9) 查看標籤的屬性是否有‘onclick=return false’->。取消點擊。屬性改爲false(在百度首頁,登陸的屬性就是這個)
10) 針對於9和8這兩種情況,我在網上搜到的結果是:執行js修改屬性(這種方法我沒有試過,不知道有沒有效果)
js=”document.getElementById(‘title‘).style.display=’block’”
driver.execute_script(js)
2、出現“object is not iterable”:
1) 首先查看腳本,測試用例出現問題
2) 組織用例時出現錯誤(我開始是用for循環遍歷y,加入測試集合中,返回集合,老是會出現錯誤,最後改成下方代碼,直接返回y,解決問題)
3、出現“Indentation Error”: 是語法問題,腳本代碼沒有正確對齊
4、使用PO設計模式封裝的頁面元素類,都有初始化函數“__init__”
5、頁面元素調用Page類時候,Page函數,後面括號的“self”不用寫
6、Page的初始化包含(self,driver)兩個元素,在頁面封裝類中,初始化中調用方式爲
Page.__init__(self,driver)
7、類中定義變量,比如x=“hello”,調用使用:self.x
8、在測試用例調用自己頁面封裝的類時,經過實例化後po=Lzsp(driver),定義函數時候, 不需要再括號中寫self
9、提示在頁面封裝類中沒有basePage.py文件中定義好的函數問題:
1) 新建名字爲module_basePage.pth文件,內容爲“basePage.py文件”存放路徑:例如(“d:\\test\\page”)
2) 進入python的安裝目錄,將文件放到python3\lib\sit-packages文件夾下
3) 在測試用例中導入其他文件夾模塊引入:import sys
4) sys.path.append(“..”)
5) from .... import ...
10、頁面元素封裝時候,定位方式一定要寫正確,否則會出錯
11、進行參數化的時候,讀取數據的文件裏面代碼:“使用絕對地址,加雙斜線”
12、運行自動化腳本時候將鼠標放到屏幕中間或者下方,(有可能切換窗口時定位不到)
13、出現”parater must be str“:使用參數有問題,(我的是因爲二次定位寫的方式有問題)
1) 在封裝頁面元素定位方式時,經常會會遇到二次定位
2) 第一次定位調用基礎類的方法,第二次定位就正常寫就行了,例子如下:
3) 我是使用:x=self.find_element(locator).find_element_by_id(locator)
4) 因爲我在頁面封裝中將把定位方式和元素都放到列表中,第二次的元素不寫定位方式,只寫元素
14、在window命令界面下使用:”python 文件名.py >>report/log.txt 2>&1”命令把結果寫入文本中
15、在頁面封裝中,類的初始化使用如下樣式:
def __init__(self,driver):
Page.__init__(self,driver)
16、打印輸出時顯示“not all arguments curerted during string format”是說明前後參數不對應:%前面是一個“%s”,而後面的參數是(“xy”,“xy”)兩個
17、同一個模塊中的兩個類,第二個調用第一個類的方法,直接使用“繼承”,2繼承1,
def __init__(self,driver):
Logger.__init__(self,’OA’)
self.log=self.getlog()
self.driver=driver
18、Python對文件進行“複製”和“改名”
1) 首先引入os模塊:import os
2) 複製:os.system(“copy 文件名.txt 新文件名.txt”)
3) 改名:os.rename(“文件名.txt”,”新文件名.txt”
19、讀取txt文件中的漢字和字符打印卻是一串編碼,像這種:(b'\xef\xbb\xbf\xe5\xa5\xbd\xe7\x9a\x84\r\n')
解決代碼如下:
x=open(“2.txt”,”rb”)
y=x.readlines()
for i in y:
j=i.decode(‘utf-8’) :在原有代碼增加一句
Print (j)
x.close()
20、出現“str object is not callable”的問題
原因是:使用定義的變量名字與內置模塊名字相同,(我的原因是:在basePage.py文件中,“得到文本的函數,element.txt後面多加了一對括號”,取消就好了)
針對自己的腳本,檢查變量的名字,相同的更改一下,
21、在編寫自動化用例中,會打開多個窗口,經常會遇到,第一次得到的句柄列表爲a=[1,2],第二次得到的句柄列表是b=[1,3,2],偶爾不會
按照順序排序(一般都是按順序排的),要切換到句柄3,
可以使用如下方法得到句柄3:
c=list(set(b)-set(a))=[3] :先把a和b變成集合,再取b不同於a的元素
最後再轉換爲列表賦值給變量c
driver.switch_to.window(c[0]) :切換到新窗口c
作者: qupan 博客地址:http://www.cnblogs.com/qupan/ 聲明:本文已獲作者授權轉載,著作權歸作者所有。