阿里最強 Python 自動化工具開源了!
1. 前言
大家好,我是安果!
最近,阿里內部開源了一個 iOS 端由 Python 編寫的自動化工具,即:tidevice
它是一款跨平臺的自動化開源工具,不依賴 Xcode 就可以啟動 WebDriverAgent( WDA ),這也就意味著 Windows 可以直接運行 iOS 自動化腳本
項目地址:
https://github.com/alibaba/taobao-iphone-device
2. 準備
進入到虛擬環境,先安裝 tidevice 的依賴包
- # 安裝依賴包
- pip3 install -U "tidevice[openssl]"
- # 查看tidevice版本,檢查是否安裝成功
- tidevice version
3. 常見功能
將 iPhone 設備連接到電腦上,就可以使用 tidevice 提供的功能了
3-1 查看設備列表
- # 二選一
- tidevice list
- # json數據顯示
- tidevice list --json
3-2 安裝、卸載應用
安裝對應的關鍵字為:「 install 」
tidevice 同時支持安裝本地 ipa 包和遠鏈下的 ipa 應用包
另外,tidevice 可以使用「 --udid 」參數將應用安裝到某一臺設備中
- # 安裝本地應用
- tidevice install example.ipa
- # 根據udid參數,指定設備安裝應用
- tidevice --udid $UDID install https://example.org/example.ipa
- tidevice install https://.....ipa
卸載對應的關鍵字為:「 uninstall 」
通過應用包名可以卸載設備上的某一個應用
- # 卸載應用(通過包名)
- # 比如:知識星球App包名為:com.unnoo.quan
- tidevice uninstall com.unnoo.quan
3-3 啟動、關閉應用
啟動應用對應的關鍵字為:「 launch 」
關閉應用對應的關鍵字為:「 kill 」
- # 打開應用
- tidevice launch com.unnoo.quan
- # 停止殺死應用
- tidevice kill com.unnoo.quan
3-4 已安裝應用及名稱、版本
使用「 tidevice applist 」命令,可以查看設備上已經安裝的應用、應用名稱、應用版本號
- # 查看設備應用信息列表
- localhost:tidevice_demo xingag$ tidevice applist
- com.tencent.xin WeChat 8.0.2
- com.ss.iphone.ugc.Aweme 抖音 13.4.0
- com.tencent.mttlite QQ瀏覽器 10.8.3
- com.panasonic.jp.imageapp Image App 1.10.17
- com.unnoo.quan 知識星球 4.20.2
- co.visualsupply.cam VSCO 189
- com.ucweb.iphone.lowversion UC瀏覽器 13.1.5
- com.niksoftware.snapseedforipad Snapseed 2.19.5
- com.autonavi.amap 高德地圖 10.76.0
- com.lagou.education 拉勾教育 1.4.9
- com.xunmeng.pinduoduo 拼多多 5.37.0
- com.tencent.QQMusic QQ音樂 10.5.5
- io.ideamp.feelcab Feelca B 1.6.0
- com.chinaunicom.mobilebusiness 手機營業廳 8.00.01
- com.feiyu-tech.vico Vicool 1.2.26
- com.ss.iphone.article.News 今日頭條 7.9.3
- com.sogou.sogouinput 搜狗輸入法 10.18.1
- org.geekbang.GeekTime 極客時間 2.9.2
- com.burbn.hyperlapse Hyperlapse 1.3.4
- com.apple.itunesu iTunes U 3.8
3-5 設備信息
利用「 tidevice info 」可以查看設備信息,比如:設備序列號、系統版本、CPU、本機號碼、時間戳、藍牙地址、MAC 地址等信息
- # 查看設備信息
- localhost:~ xingag$ tidevice info
- MarketName: iPhone SE (1st generation)
- DeviceName: xingag
- ProductVersion: 14.4
- ProductType: iPhone8,4
- ModelNumber: MP892
- SerialNumber: ...
- CPUArchitecture: arm64
- ProductName: iPhone OS
- ProtocolVersion: 2
- RegionInfo: ZP/A
- TimeIntervalSince1970: 1616979424.235399
- TimeZone: Asia/Shanghai
- WiFiAddress: 58:e2:8f:68:4c:b0
- BluetoothAddress: 58:e2:8f:68:4c:b1
- BasebandVersion: 10.40.01
- ...
如果要查看設備的電池信息,可以使用關鍵字 「 --domain + 應用包名 」來獲取
- # 查看設備電池信息
- localhost:~ xingag$ tidevice info --domain com.apple.mobile.battery --json
- {
- "BatteryCurrentCapacity": 54,
- "BatteryIsCharging": true,
- "ExternalChargeCapable": true,
- "ExternalConnected": true,
- "FullyCharged": false,
- "GasGaugeCapability": true,
- "HasBattery": true
- }
3-6 重啟及截圖
重啟對應的關鍵字為:「 reboot 」
截圖對應的關鍵字為:「 screenshot 」
- # 重啟設備
- tidevice reboot
- # 截圖并保存到文件 screenshot.jpg 中
- tidevice screenshot screenshot.jpg
3-7 系統日志及更多幫助
查看系統日志的命令為:「 tidevice syslog 」,當然也可以配置 grep 參數進行過濾
- # 查看系統日志
- tidevice syslog
- # 更多幫助
- tidevice -h
4. 自動化步驟
要完成 iOS 端的自動化,我們還需要做一些準備工作
4-1 安裝 WDA
我們需要將 WebDriverAgent 安裝到 iOS 設備上,通過它驅動手機進行一系列自動化操作
PS:由于 Facebook WDA 很長時間沒有更新了,這里建議直接使用 Appium WDA
https://github.com/appium/WebDriverAgent
下載項目后,使用 Xcode 打開,Scheme 選擇 WebDriverAgentRunner,設備選擇真機
然后配置開發者證書,可以參考下面鏈接進行配置
https://testerhome.com/topics/7220
最后,Xcode 選擇 Project 下的 Test 將項目運行到真機設備上
注意:第一次運行 WDA 可能運行失敗,需要手動在設置中對證書添加信任
4-2 運行 WDA
真機設備安裝完 WDA 后,就可以脫離 Mac,使用 Windows 進行自動化操作了
使用「 tidevice wdaproxy 」命令可以運行 WDA 和端口轉發
- # 運行 WDA
- # 端口轉發到8100
- # 應用包名:com.facebook.WebDriverAgentRunner.xingag23.xctrunner
- idevice wdaproxy -B com.facebook.WebDriverAgentRunner.xingag23.xctrunner --port 8100
PS:由于 Xcode 設置證書的時候,更改過 bundle_id,所以這里的包名是一個變量
4-3 編寫自動化腳本
接下來,就可以使用 Appium 或 facebook-wda 編寫腳本并運行到 iOS 設備上了
以 facebook-wda 為例
首先,我們安裝對應的依賴
- # 安裝facebook-wda依賴
- pip3 install -U facebook-wda
接著,編寫自動化腳本并運行測試
- import wda
- import time
- # 連接設備
- c1 = wda.USBClient()
- # c1 = wda.Client("http://10.3.209.175:8100")
- print(c.info)
- # 極客時間
- bundle_id = 'org.geekbang.GeekTime'
- # 通過app的bundleId啟動App
- s = c1.session(bundle_id)
- # 休眠5s
- s.sleep(5)
- # 截圖保存到本地
- c1.screenshot('sc.png')
- # 回到桌面
- s.home()
5. 最后
阿里這款 iOS 端自動化工具的主要優點是啟動速度快,內存占用低;更重要的是,它是跨平臺,穩定性相對較高