一、背景
不想依赖mac运行 iOS Appium,可在Linux上通过usbmuxd+tidevice的组合开启 iOS Appium 服务。
二、环境搭建
1、Appium安装:
1)搜索appium进行
docker search appium
2)拉取appium 镜像
docker pull appium/appium
3)启动容器
docker run -it --name env_ios -d -v /var/run/usbmuxd:/var/run/usbmuxd -e TZ="Asia/Shanghai" --network host --privileged appium/appium
由于需要跟ios通讯,需要把usbmuxd协议 挂载到宿主机
4)进入容器
docker exec -it env_ios bash
在容器内安装 pip 和 tidevice
apt update
apt install python3-pip
pip3 install -U "tidevice[openssl]"
安装过程如果报错Attributeerror: htmlparser object has no attribute unescape ( Solved )
解决方法如下:
pip3 install --upgrade setuptools
pip3 install --upgrade
pip pip3 install --upgrade distlib
如果报错python cannot import name ‘sysconfig’ from ‘distutils’, 解决方法如下:
apt install python3.9-distutils # python3.9替换成你自己的python版本
以上都解决后,就可以执行装tidevice的命令了
Appium 容器所在宿主机插上苹果手机,查看是否连接上
如果这里没有出来任何设备,有可能是宿主机本身就没有安装usbmuxd协议,直接在宿主机层面安装usbmuxd,然后重启linux,ps查看一下协议是否起来即可:
ps -ef | grep usbmuxd
sudo apt install usbmuxd
sudo reboot
启动wdaproxy监听对应设备的wda端口
单机情况,可以不用指定设备,指定特定设备时则使用-u参数
其中 -u 后面接iPhone手机的 udid,可通过 tidevice list 查询; -B 后面接 bundle identifier, 可通过如下tidevice applist 查询:
在容器内启动Appium服务,这里只做调试用,固定一个4725端口
2、测试服务
在另外的机器上打开 appium inspector, 配置如下:
{
"appium:deviceName": "iPhone 11",
"platformName": "iOS",
"appium:udid": "00008020-##",
"appium:bundleId": "com.###",
"appium:platformVersion": "15.2",
"appium:webDriverAgentUrl": "http://10.33.##.##:8100",
"appium:noReset": false,
"appium:usePrebuiltWDA": false,
"appium:useXctestrunFile": false,
"appium:skipLogCapture": true
}
其中 Remote Host 为 Appium 容器宿主机 的IP, Remote Port 为 指定的Appium 的端口。
可以发现,投屏连接成功:
这里犯了2个坑:
1、两个PC 没有在同一个公司内网,导致appium inspector 连接失败
ping 10.33.###.## ( appium 容器所在宿主机ip),也ping不通。改了同一个wifi后就通了
2、没有启动相对应的APP,原因是自己错用了appium android 的字段 package, 改为 bundleId 即可