阿里最強 Python 自動化工具開源了!

AirPython發表於2021-04-01

image

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 端自動化工具的主要優點是啟動速度快,記憶體佔用低;更重要的是,它是跨平臺,穩定性相對較高

更多 Python 自動化、爬蟲相關的技術乾貨,可以關注公眾號「 AirPython 」來解鎖!

如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因為這將是我持續輸出更多優質文章的最強動力!

相關文章