當前位置:
首頁 > 最新 > 二十一條自動化測試過程中遭遇的問題及解決思路

二十一條自動化測試過程中遭遇的問題及解決思路


記錄自動化中遇到的一些錯誤及解決思路,會持續更新(根據個人情況不同,錯誤解決方法不同)

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/

聲明:本文已獲作者授權轉載,著作權歸作者所有。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 開源優測 的精彩文章:

Selenium3源碼之common package篇

TAG:開源優測 |