二十一條自動化測試過程中遭遇的問題及解決思路
記錄自動化中遇到的一些錯誤及解決思路,會持續更新(根據個人情況不同,錯誤解決方法不同)
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的安裝目錄,將文件放到python3libsit-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"xefxbbxbfxe5xa5xbdxe7x9ax84
")
解決代碼如下:
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/
聲明:本文已獲作者授權轉載,著作權歸作者所有。
TAG:開源優測 |