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 端自动化工具的主要优点是启动速度快,内存占用低;更重要的是,它是跨平台,稳定性相对较高