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

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

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/ 聲明:本文已獲作者授權轉載,著作權歸作者所有。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章