1. 前言
本次更新爲Airtest庫更新,主要是新增了設備釋放接口、大量斷言的語句,新增了對Android 12L的支持,對安裝接口的增強,和若干bug的修復。
2. Airtest版本提升至1.2.7
1)新增了device.disconnect()
接口
原先的Airtest,在腳本長時間運行、或是使用了AirtestIDE反覆連接多個不同手機時,可能會 建立大量adb連接未釋放 ,一直佔用資源。
這也會導致在部分手機上,反覆切換橫屏和豎屏應用時,會有概率 出現屏幕有一半內容變成黑屏 的問題。
因此,1.2.7版本的Airtest新增了device.disconnect()
接口,用於:
- 在腳本中允許手動調用,讓設備創建出的所有adb連接都強制釋放掉,
dev.disconnect()
,如果還要繼續使用這個設備對象,最好重新再創建一次dev = connect_device("android:///")
- 同時對連接的創建進行了更進一步的清理操作,避免黑屏問題的發生
2)新增了大量的斷言語句
在腳本編寫中,斷言語句是非常重要的組成部分,但airtest舊版只支持 assert_exists
和 assert_equal
兩種類型的斷言語句。
現在Airtest1.2.7版本,將所有斷言語句單獨放在 airtest/core/assertions.py
中,增加了更多類型,方便腳本編寫工作。
目前Airtest1.2.7支持的斷言列表:
assert_exists
assert_not_exists
assert_equal
assert_not_equal
assert_true
assert_false
assert_is
assert_is_not
assert_is_none
assert_is_not_none
assert_in
assert_not_in
assert_is_instance
assert_not_is_instance
assert_greater
assert_greater_equal
assert_less
assert_less_equal
我們也可以在Airtest的API文檔中,找到所有斷言接口及其說明:https://airtest.readthedocs.io/en/latest/all_module/airtest.core.assertions.html 。
3)支持設置斷言時附帶當前截圖
Airtest1.2.7除了讓斷言語句更加豐富以外,還支持設置斷言時,是否附帶截取當前畫面的圖片,然後顯示在Airtest報告中,這樣報告的斷言內容會更加清晰,也更具有airtest的截圖特色:
# 默認情況下,斷言截圖會開啓
assert_exists()
# 如不需要斷言時截取當前畫面,則可以設置關閉斷言的截圖
assert_exists(截圖,snapshot=False)
4)新增對Android12L的支持
Airtest1.2.7已增加 minicap
對android 12L的支持,Poco的支持可以將pocoui更新至1.0.88版本。
5)安裝接口pm_install
的增強
Airtest1.2.7對 pm_install
接口進行了較大的增強:
- 支持了安裝參數的傳入(與
adb.install
保持一致), - 支持了中文路徑、一些包含特殊符號路徑
- 對路徑的改動同時影響到了
adb.pull()
和adb.push()
接口,支持了中文路徑、包含斜槓的路徑(比如\g
這樣的字符也會有問題)、包含特殊符號(空格、括號等)的路徑 - 在
pm_install
安裝完畢後,會進行adb shell rm apk
的操作,但在部分低配機型上可能會在這一步卡住超時(實際已經刪除完畢,但代碼一直不結束,導致整個腳本卡死),因此增加timeout 30秒自動結束
6)logwrap增加截圖參數
如果希望把自定義的函數也顯示到airtest的報告中,可以使用 @logwrap
,例如:
@logwrap
def func1():
pass
如果希望在報告顯示 func1
內容的同時,還附帶一張當前設備的截圖的話,可以增加 snapshot=True
參數在 func1()
的定義中:
@logwrap
def func1(snapshot=True):
pass
7)若干bug的修復
- 嘗試修復偶現的一個報告讀取不到圖片導致生成報告失敗的問題
- 兼容了adb 獲取屏幕信息超時的情況
- 修復了一個
adb.text()
在輸入字母+數字時可能會導致亂序的問題,同時支持空格
8)新增了3個PR的支持
- 在Windows環境下,初始化
airtest.core.win.Windows
對象時,允許開發者選擇性跳過connect()
方法中的set_foreground()
功能 - 在
Android.get_render_resolution
中增加應用包名參數,
使得get_render_resolution
能夠獲取到除top activity以外的應用的渲染區域 - 修復win和linux的
start_app
缺少的傳參
【tips】關於本版本更新內容的更多示例,可以持續關注我們後續的推文,後續都會展開給同學們介紹對應的接口實例。
3. 如何更新
因本次更新僅更新了Airtest庫,所以同學們目前只能在自己本地python環境中,將Airtest更新到最新版本:
pip install -U airtest
對於使用AirtestIDE的同學,可以等我們發佈1.2.15版本的IDE,或者在舊版本AirtestIDE中設置使用本地python環境,然後將本地python環境的Airtest庫升級到最新版本即可。
4. 其它問題
如同學們在使用新版的Airtest時遇到了一些問題無法解決,可以通過此網站向我們的開發者快速提單:https://airtest.netease.com/issue_create 。
可以在標題中加入“Airtest1.2.7”之類的字眼,方便我們快速篩選和排查。
Airtest官網:https://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有云服務:https://airlab.163.com/b2b
官方答疑 Q 羣:117973773
呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~