如何用Appium运行多台iOS物理设备?连接崩溃问题求助
解决Appium多iOS物理设备连接崩溃/端口拒绝问题
核心问题分析
你遇到的问题本质是多设备并行时,WebDriverAgent(WDA)端口冲突、设备唯一性标识缺失,导致Appium服务无法正确区分和连接设备。
分步解决方案
1. 为每台设备启动独立的Appium服务实例
每台设备需要对应一个独立的Appium服务,必须同时指定唯一的Appium服务端口和WDA端口,不能只设置单一端口:
- 第一台设备启动命令:
appium server -p 4723 --driver-xcuitest-webdriveragent-port 8100 --driver-xcuitest-device-timeout 120000 - 第二台设备启动命令:
注意:appium server -p 4724 --driver-xcuitest-webdriveragent-port 8101 --driver-xcuitest-device-timeout 120000-p指定Appium服务自身的端口,必须唯一不重复--driver-xcuitest-webdriveragent-port指定WDA的端口,每台设备对应一个具体整数(不要用810x这类占位符)- 增加超时参数避免因WDA启动缓慢导致的套接字挂断
2. 配置Capabilities时指定设备唯一标识
每个设备的Capabilities必须明确指定UDID,让Appium精准定位目标设备:
# 第一台设备的Capabilities配置 caps_1 = { "platformName": "iOS", "appium:platformVersion": "16.0", "appium:deviceName": "iPhone 14", "appium:udid": "你的第一台设备UDID", "appium:automationName": "XCUITest", "appium:wdaLocalPort": 8100 # 与对应Appium服务的WDA端口保持一致 } # 第二台设备的Capabilities配置 caps_2 = { "platformName": "iOS", "appium:platformVersion": "16.0", "appium:deviceName": "iPhone 13", "appium:udid": "你的第二台设备UDID", "appium:automationName": "XCUITest", "appium:wdaLocalPort": 8101 # 与对应Appium服务的WDA端口保持一致 }
获取设备UDID的方法:连接设备后在终端执行idevice_id -l
3. 确保WDA正确安装并授权
- 每台设备首次运行前,手动授权WDA:打开设备「设置」→「通用」→「VPN与设备管理」→ 信任WDA对应的开发者证书
- 如果WDA安装失败,执行以下命令手动编译安装,确认无报错:
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=设备UDID' test
4. 排查端口占用问题
若仍出现端口拒绝,先检查端口是否被占用:
# 检查Appium服务端口(示例:4723) lsof -i :4723 # 检查WDA端口(示例:8100) lsof -i :8100
如果有占用进程,执行以下命令强制终止:
kill -9 进程PID
5. 禁用自动WDA重启(可选)
部分场景下自动重启WDA会引发端口冲突,可在Capabilities中添加以下配置:
"appium:useNewWDA": False "appium:noReset": True
常见误区规避
- 不要用
810x这类占位符作为端口号,必须使用具体整数 - 不要忽略UDID配置,Appium无法通过
deviceName区分同型号设备 - 不要只设置WDA端口,忘记配置Appium服务自身的唯一端口
内容的提问来源于stack exchange,提问作者Amit Morad
相关产品推荐
相关产品推荐

