👆對私有云感興趣能夠進入公衆號回覆「私有云」哦。python
在編寫代碼的時候,咱們常常會作出一些假設,斷言的做用就是在代碼中捕捉這些假設。微信
使用斷言的好處有不少,最明顯的幾點是:app
能夠暴露調用者的錯誤編輯器
便於調試單元測試
對代碼沒有代價測試
而且斷言在單元測試代碼中很是重要,所以咱們很是建議在腳本里使用斷言語句,來斷定被測應用當前的狀態是不是咱們預期中的狀態。flex
下文將詳細講解在Airtest和Airtest-selenium中提供的斷言接口。ui
1. 驗證UI界面
Airtest給咱們提供了assert_exists
和assert_not_exists
兩個接口,來斷言一張圖片存在或不存在於當前畫面中。url
這倆個接口都支持Android
、iOS
和Windows
平臺,它們的參數以下:spa
v
– 要檢查的目標msg
– 斷言的簡短描述,它將被記錄在報告中
好比,咱們以當前設備屏幕上存在天氣應用的icon,來判斷當前設備上存在天氣應用的app爲例,就能夠寫出以下的斷言:
assert_exists(Template(r"tpl1578970400453.png", record_pos=(-0.345, 0.142), resolution=(1080, 1920)), "存在天氣應用")
此刻的參數v
是一張天氣應用的icon,填寫的msg
也會在對應的斷言步驟上顯示出來。須要注意的是,目前只有airtest版本爲1.1.1時才支持顯示斷言信息,1.2.2版本的IDE內嵌的airtest版本並非1.1.1,因此暫不支持顯示斷言信息。
(該報告用命令行生成,本地airtest版本爲1.1.1)
2. 驗證數值
同時,airtest還提供了assert_equal
和assert_not_equal
兩個接口,來斷言傳入的兩個值相等或者不相等。
跟上述的倆個接口同樣,這倆個接口也支持Android
、iOS
和Windows
平臺。它們的參數以下:
first
– 第一個值second
– 第二個值msg
– 斷言的簡短描述,它將被記錄在報告中
大多數狀況下,這倆個接口用於判斷控件的某個屬性值與預期值是否相等,例如:
# assert_equal("實際值", "預測值", "請填寫測試點.")
# 獲取控件的「text」屬性值
value = poco("com.miui.calculator:id/btn_8_s").attr("text")
assert_equal(value, "8", "按鈕值爲8")
如示例代碼所示,這裏經過poco獲取了一個控件的「text」屬性值,而後再經過斷言來判斷這個屬性值是否爲「8」。填寫的msg
依舊會顯示在報告的斷言信息上。
1. 斷言圖片存在於當前頁面
Airtest-Selenium給咱們提供了assert_template()
接口,用於斷言目標存在於當前頁面中,它包含如下參數:
v
- 一個圖片對象msg
- 斷言的簡短描述,它將被記錄在報告中
# 斷言當前頁面存在百度logo這張圖片
driver.assert_template(Template(r"tpl1578993813194.png", record_pos=(12.32, 3.915), resolution=(100, 100)), "成功打開百度網頁")
2. 斷言元素存在
assert_exist()
接口用來斷言頁面存在某個元素,它的參數與其它斷言相比比較特殊:
param
- 方法的參數operation
- 查找元素的方法msg
- 斷言的簡短描述,它將被記錄在報告中
# 斷言當前頁面存在「百度新聞」的頁面元素
driver.assert_exist("//a[@href='http://news.baidu.com']", "xpath", "存在百度新聞元素")
示例代碼中的參數"xpath"
表明用"xpath"
這個方法來查找頁面元素,該元素的"xpath"
屬性值爲"//a[@href='http://news.baidu.com']"
;同理,還能夠用"id"
和"name"
等方法來查找元素。
1. 處理斷言失敗
不管是airtest提供的斷言接口,仍是Airtest-selenium提供的斷言接口,若是斷言失敗,都會引起AssertionError
,從而致使腳本執行終止;若是不想腳本由於一個斷言失敗就終止,能夠將斷言用try語句包起來:
value = poco("com.miui.calculator:id/btn_8_s").attr("text")
try:
assert_equal(value, "8", "按鈕值爲8")
except AssertionError:
print("按鈕值斷言失敗")
poco("com.miui.calculator:id/btn_9_s").click()
這樣即便斷言失敗,後面的poco點擊語句仍是會正常執行:
不然斷言失敗時,腳本會直接報錯,終止運行:
2. assert_exists接口的超時時間和闕值
assert_exists
和assert_not_exists
這兩個接口是用來驗證某個圖片是否存在於當前設備屏幕上,在查找圖片時,它們會有一個超時時間和闕值:
從源碼中能夠得知,這倆接口查找圖片的超時時間和闕值都是全局變量,timeout
爲20s,threasold
爲0.7,因此腳本只有在20s內找到置信度>0.7的結果,斷言纔會成功。
若是想要修改這倆個接口查找圖片的超時時間和闕值,把對應倆個全局變量的值修改便可。
本文分享自微信公衆號 - AirtestProject(AirtestProject)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。