【更新公告】Airtest更新至1.3.0.1版本

1. 前言

本次更新爲Airtest庫更新,版本提升至1.3.0.1版本,主要新增了一些iOS設備相關的裝包等接口,以及封裝了一些tidevice常用接口。更多更新詳情,詳見我們下文的描述。

2. 新增iOS設備接口

1)iOS安裝接口:installinstall_app

對於 本地USB連接的iOS設備 ,新版本支持裝包功能:

# 可以直接使用install接口,支持通過本地.ipa文件安裝APP,也支持通過下載鏈接安裝APP
install(r"D:\demo\test.ipa") 
install("http://www.example.com/test.ipa") 

# 也可以先獲取當前設備,用device().install_app的方式裝包
dev = device()

dev.install_app(r"D:\demo\test.ipa")
dev.install_app("http://www.example.com/test.ipa") 

2)iOS卸載接口:uninstalluninstall_app

對於 本地USB連接的iOS設備 ,新版本支持卸載功能:

# 可以直接使用uninstall接口卸載包體
uninstall("com.netease.cloudmusic")

# 也可以先獲取當前設備,用device().uninstall_app的方式卸載包體
dev = device()

dev.uninstall_app("com.netease.godlike")

3)列出iOS設備所有APP的接口:list_app

對於 本地USB連接的iOS設備 ,新版本支持列出APP列表的功能:

list_app("user") 裏傳入要列出的app類型,我們可以得到相應的app列表。
參數可選 user/system/all, 分別表示列出用戶安裝的app/系統app/全部app。
返回值示例:[('com.apple.mobilesafari', 'Safari', '8.0'), ...]

dev = device()

#列出並打印全部APP
all_app = dev.list_app("all")
print(all_app)

#打印系統APP
print(dev.list_app("system"))

#列出並打印用戶安裝的APP
user_app = dev.list_app("user")
print(user_app)

4)iOS剪切板功能:get_clipboardset_clipboard

對於iOS設備(本地、遠程均可),新版本支持剪切板功能:

#獲取剪切板內容
text = get_clipboard()
print(text)

#設置剪貼板內容
set_clipboard("content")

注意:當iOS設備爲 遠程設備 、或者 安裝了不止一個wda 時,需要指定具體的 wda_bundle_id 才能使用:

#獲取剪切板內容
text = get_clipboard(wda_bundle_id="com.WebDriverAgentRunner.xctrunner")

#設置剪貼板內容
set_clipboard("content", wda_bundle_id="com.WebDriverAgentRunner.xctrunner")

3. 新增tidevice相關接口

針對本地USB接入的iOS設備,Airtest結合tidevice的能力,封裝了一個 TIDevice 對象,提供了幾個常用接口如下:

  • devices :列出USB連接的所有設備的 UDID 列表
  • list_app : 列出手機上安裝的應用列表,支持對類型進行篩選,包括 user/system/all
  • list_wda : 列出手機上安裝的所有WDA的 bundleID
  • device_info :獲取手機信息
  • install_app :安裝ipa包,支持本地路徑或URL
  • uninstall_app:卸載 bundle_id 對應的包體
  • start_app :啓動 bundle_id 對應的包體
  • stop_app :停止 bundle_id 對應的包體
  • ps : 獲取當前的進程列表
  • ps_wda : 獲取當前啓動中的WDA列表
  • xctest:啓動WDA

可以參考:https://github.com/AirtestProject/Airtest/blob/master/tests/test_tidevice.py

代碼執行效果示例:

>>> from airtest.core.ios.ios import TIDevice
>>> devices = TIDevice.devices()
>>> print(devices)
['10da21b9091f799891557004e4105ebab3416cb9']
>>> udid = devices[0]

>>> print(TIDevice.list_app(udid))
[ ('com.230316modified.WebDriverAgentRunner.xctrunner', 'wda-Runner', '1.0'),]

>>> print(TIDevice.list_app(udid, "system"))
[('com.apple.calculator', 'Calculator', '1.0.0'),]

>>> print(TIDevice.list_wda(udid))
['com.test.WebDriverAgentRunner.xctrunner']

>>> print(TIDevice.device_info(udid))
{'productVersion': '12.4.8', 'productType': 'iPhone7,2', 'modelNumber': 'MG472', 'serialNumber': 'DNPNW6EJG5MN', 'timeZone': 'Asia/Shanghai', 'uniqueDeviceID': '10da21b9091f799891557004e4105ebab3416cb9', 'marketName': 'iPhone 6'}

>>> TIDevice.start_app(udid, "com.apple.mobilesafari")

>>> TIDevice.stop_app(udid, "com.apple.mobilesafari")

>>> print(TIDevice.ps(udid))
[ {'pid': 215, 'name': 'MobileMail', 'bundle_id': 'com.apple.mobilemail', 'display_name': 'MobileMail'}]

>>> print(TIDevice.ps_wda(udid))
['com.test.WebDriverAgentRunner.xctrunner']

另外,TIDevice.xctest 接口的執行示例如下:

import threading
wda_bundle_id = TIDevice.list_wda(udid)[0]
# 創建一個線程,執行xctest
t = threading.Thread(target=TIDevice.xctest, args=(udid, wda_bundle_id), daemon=True)
t.start()
time.sleep(5)
ps_wda = TIDevice.ps_wda(udid)
print(ps_wda)
time.sleep(5)
# 終止線程
t.join(timeout=3)

4. 新增錯誤類型NoDeviceError

如果當前未連接任何設備,但是又調用了某些需要連接設備纔可以調用的接口時,拋出異常 NoDeviceError("No devices added.")

5. using接口的改動

using 接口的作用是,支持在腳本中引用另外一個腳本,同時還能夠讓Airtest正確地讀取到其他腳本中的圖片路徑。

假設目錄結構如下:

demo/
    foo/
        bar.air
    baz.air
    main.py

如果我們希望在 main.py 中引用 foo/bar.airbaz.air,可以將項目根路徑設置到 ST.PROJECT_ROOT ,或者確保項目根路徑是當前工作目錄:

# main.py
from airtest.core.api import *
ST.PROJECT_ROOT = r"D:\demo"  # This line can be ignored if it is the current working directory
using("foo/bar.air")
using("baz.air")

如果我們希望在 foo/bar.air 中引用 baz.air ,可以這樣寫:

# foo/bar.air
from airtest.core.api import *
using("../baz.air")

6. 其它優化與改動

  • 當Airtest腳本引發了 assert 異常時,退出碼爲 20 ,以便和其他報錯區分
  • 更新了 Yosemite.apk ,修復了一些穩定性問題
  • windows平臺新增接口 set_focus ,與原先的 set_foreground 功能相同

7. 如何更新

因本次更新僅更新了Airtest庫,所以同學們目前只能在自己本地python環境中,將Airtest更新到最新版本:

pip install -U airtest

對於使用AirtestIDE的同學,可以等我們發佈1.2.16版本的IDE,或者在舊版本AirtestIDE中設置使用本地python環境,然後將本地python環境的Airtest庫升級到最新版本即可。

8. 更新常見問題

如同學們在使用新版的Airtest時遇到了一些問題無法解決,特別是iOS新增接口相關的問題,可以通過此網站向我們的開發者快速提單:https://airtest.netease.com/issue_create

可以在標題中加入“Airtest1.3.0.1”之類的字眼,方便我們快速篩選和排查。


Airtest官網https://airtest.netease.com/
Airtest教程官網https://airtest.doc.io.netease.com/
搭建企業私有云服務https://airlab.163.com/b2b

官方答疑 Q 羣:117973773

呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~

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