阿里最強(qiáng) Python 自動(dòng)化工具開源了!
1. 前言
大家好,我是安果!
最近,阿里內(nèi)部開源了一個(gè) iOS 端由 Python 編寫的自動(dòng)化工具,即:tidevice
它是一款跨平臺(tái)的自動(dòng)化開源工具,不依賴 Xcode 就可以啟動(dòng) WebDriverAgent( WDA ),這也就意味著 Windows 可以直接運(yùn)行 iOS 自動(dòng)化腳本
項(xiàng)目地址:
https://github.com/alibaba/taobao-iphone-device
2. 準(zhǔn)備
進(jìn)入到虛擬環(huán)境,先安裝 tidevice 的依賴包
- # 安裝依賴包
- pip3 install -U "tidevice[openssl]"
- # 查看tidevice版本,檢查是否安裝成功
- tidevice version
3. 常見功能
將 iPhone 設(shè)備連接到電腦上,就可以使用 tidevice 提供的功能了
3-1 查看設(shè)備列表
- # 二選一
- tidevice list
- # json數(shù)據(jù)顯示
- tidevice list --json
3-2 安裝、卸載應(yīng)用
安裝對(duì)應(yīng)的關(guān)鍵字為:「 install 」
tidevice 同時(shí)支持安裝本地 ipa 包和遠(yuǎn)鏈下的 ipa 應(yīng)用包
另外,tidevice 可以使用「 --udid 」參數(shù)將應(yīng)用安裝到某一臺(tái)設(shè)備中
- # 安裝本地應(yīng)用
- tidevice install example.ipa
- # 根據(jù)udid參數(shù),指定設(shè)備安裝應(yīng)用
- tidevice --udid $UDID install https://example.org/example.ipa
- tidevice install https://.....ipa
卸載對(duì)應(yīng)的關(guān)鍵字為:「 uninstall 」
通過應(yīng)用包名可以卸載設(shè)備上的某一個(gè)應(yīng)用
- # 卸載應(yīng)用(通過包名)
- # 比如:知識(shí)星球App包名為:com.unnoo.quan
- tidevice uninstall com.unnoo.quan
3-3 啟動(dòng)、關(guān)閉應(yīng)用
啟動(dòng)應(yīng)用對(duì)應(yīng)的關(guān)鍵字為:「 launch 」
關(guān)閉應(yīng)用對(duì)應(yīng)的關(guān)鍵字為:「 kill 」
- # 打開應(yīng)用
- tidevice launch com.unnoo.quan
- # 停止殺死應(yīng)用
- tidevice kill com.unnoo.quan
3-4 已安裝應(yīng)用及名稱、版本
使用「 tidevice applist 」命令,可以查看設(shè)備上已經(jīng)安裝的應(yīng)用、應(yīng)用名稱、應(yīng)用版本號(hào)
- # 查看設(shè)備應(yīng)用信息列表
- 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 知識(shí)星球 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 手機(jī)營業(yè)廳 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 極客時(shí)間 2.9.2
- com.burbn.hyperlapse Hyperlapse 1.3.4
- com.apple.itunesu iTunes U 3.8
3-5 設(shè)備信息
利用「 tidevice info 」可以查看設(shè)備信息,比如:設(shè)備序列號(hào)、系統(tǒng)版本、CPU、本機(jī)號(hào)碼、時(shí)間戳、藍(lán)牙地址、MAC 地址等信息
- # 查看設(shè)備信息
- 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
- ...
如果要查看設(shè)備的電池信息,可以使用關(guān)鍵字 「 --domain + 應(yīng)用包名 」來獲取
- # 查看設(shè)備電池信息
- 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 重啟及截圖
重啟對(duì)應(yīng)的關(guān)鍵字為:「 reboot 」
截圖對(duì)應(yīng)的關(guān)鍵字為:「 screenshot 」
- # 重啟設(shè)備
- tidevice reboot
- # 截圖并保存到文件 screenshot.jpg 中
- tidevice screenshot screenshot.jpg
3-7 系統(tǒng)日志及更多幫助
查看系統(tǒng)日志的命令為:「 tidevice syslog 」,當(dāng)然也可以配置 grep 參數(shù)進(jìn)行過濾
- # 查看系統(tǒng)日志
- tidevice syslog
- # 更多幫助
- tidevice -h
4. 自動(dòng)化步驟
要完成 iOS 端的自動(dòng)化,我們還需要做一些準(zhǔn)備工作
4-1 安裝 WDA
我們需要將 WebDriverAgent 安裝到 iOS 設(shè)備上,通過它驅(qū)動(dòng)手機(jī)進(jìn)行一系列自動(dòng)化操作
PS:由于 Facebook WDA 很長(zhǎng)時(shí)間沒有更新了,這里建議直接使用 Appium WDA
https://github.com/appium/WebDriverAgent
下載項(xiàng)目后,使用 Xcode 打開,Scheme 選擇 WebDriverAgentRunner,設(shè)備選擇真機(jī)
然后配置開發(fā)者證書,可以參考下面鏈接進(jìn)行配置
https://testerhome.com/topics/7220
最后,Xcode 選擇 Project 下的 Test 將項(xiàng)目運(yùn)行到真機(jī)設(shè)備上
注意:第一次運(yùn)行 WDA 可能運(yùn)行失敗,需要手動(dòng)在設(shè)置中對(duì)證書添加信任
4-2 運(yùn)行 WDA
真機(jī)設(shè)備安裝完 WDA 后,就可以脫離 Mac,使用 Windows 進(jìn)行自動(dòng)化操作了
使用「 tidevice wdaproxy 」命令可以運(yùn)行 WDA 和端口轉(zhuǎn)發(fā)
- # 運(yùn)行 WDA
- # 端口轉(zhuǎn)發(fā)到8100
- # 應(yīng)用包名:com.facebook.WebDriverAgentRunner.xingag23.xctrunner
- idevice wdaproxy -B com.facebook.WebDriverAgentRunner.xingag23.xctrunner --port 8100
PS:由于 Xcode 設(shè)置證書的時(shí)候,更改過 bundle_id,所以這里的包名是一個(gè)變量
4-3 編寫自動(dòng)化腳本
接下來,就可以使用 Appium 或 facebook-wda 編寫腳本并運(yùn)行到 iOS 設(shè)備上了
以 facebook-wda 為例
首先,我們安裝對(duì)應(yīng)的依賴
- # 安裝facebook-wda依賴
- pip3 install -U facebook-wda
接著,編寫自動(dòng)化腳本并運(yùn)行測(cè)試
- import wda
- import time
- # 連接設(shè)備
- c1 = wda.USBClient()
- # c1 = wda.Client("http://10.3.209.175:8100")
- print(c.info)
- # 極客時(shí)間
- bundle_id = 'org.geekbang.GeekTime'
- # 通過app的bundleId啟動(dòng)App
- s = c1.session(bundle_id)
- # 休眠5s
- s.sleep(5)
- # 截圖保存到本地
- c1.screenshot('sc.png')
- # 回到桌面
- s.home()
5. 最后
阿里這款 iOS 端自動(dòng)化工具的主要優(yōu)點(diǎn)是啟動(dòng)速度快,內(nèi)存占用低;更重要的是,它是跨平臺(tái),穩(wěn)定性相對(duì)較高