iOS —— 直连 WebDriverAgent
多数 iOS 自动化方案都要在你和手机之间架一台 Appium 服务器。Qirabot 内置 的 WDA 客户端跳过了它:通过 HTTP 直连设备上已运行的 WebDriverAgent。 不需要 Appium、不需要 node、不需要额外 Python 包——核心安装即可。
元素定位是对截图做 AI 视觉识别,因此没有 XCUITest 元素查询要维护;抗拒 无障碍检查的应用(游戏、自绘 UI)和原生应用一样能自动化。
最快的验证方式是 CLI(WDA 需已在运行——配置见下文):
bash
qirabot ios "在微信里给 Alice 发一句 hi" --bundle-id com.tencent.xin同样的事在 Python 里:
python
from qirabot import Qirabot, WdaClient
client = WdaClient("http://127.0.0.1:8100")
client.app_launch("com.apple.Preferences")
bot = Qirabot().bind(client)
result = bot.ai("打开 通用 > 关于本机,报告 iOS 版本号")
print(f"Success: {result.success}")
bot.close()真机配置(3 步)
- 在手机上运行 WebDriverAgent 并保持运行。WebDriverAgent 是 Appium 开源的 iOS agent——克隆 appium/WebDriverAgent,在 Xcode 中打开,用你自己的签名团队对设备运行
WebDriverAgentRunnerscheme(或xcodebuild ... -destination 'id=<udid>' -allowProvisioningUpdates test)。 你只需要 agent 本身——不需要 Appium 服务器。 - USB 端口转发:
iproxy 8100 8100(来自libimobiledevice——macOS 上brew install libimobiledevice)。 自检:curl http://127.0.0.1:8100/status返回 JSON 即成功。 - 运行任务 —— 默认的
--wda-url(http://127.0.0.1:8100)现在已指向 手机。
设备由 --wda-url 选择,而不是设备名。多台设备就为每台跑一个 iproxy 映射到不同本地端口,用 --wda-url 区分。
模拟器
模拟器请改用 Appium 引擎:传 --device 加模拟器设备类型(来自 xcrun simctl list devicetypes 的名字,如 iPhone 15)——Appium 会创建 并启动对应模拟器。需要 qirabot[appium]。
bash
qirabot ios "..." --device "iPhone 15"注意:Appium 引擎目前只支持模拟器(没有 --udid 选项)——真机走上面的 WDA 直连路径。已经在跑 Appium(或云真机平台)?见 Appium + Qirabot。
设备录屏
默认录屏抓的是宿主机屏幕,手机画面不在其中。iOS 运行请改录 WDA 的 MJPEG 流(端口 9100;USB 真机在 8100 转发之外再加一条 iproxy 9100 9100;宿主 机需要 ffmpeg):
python
bot = Qirabot(record_mjpeg_url="http://127.0.0.1:9100")CLI 的 qirabot ios "..." --record 会自动做这件事,并在启动前检查流是否 可达;--mjpeg-url 可覆盖默认地址。报告结构和全部录屏开关见 报告与录屏。
平台说明
- iOS 没有返回键;
bot.go_back()执行通用的左边缘右滑手势。 long_press可用;hover为空操作,right_click降级为点按;clear_text是尽力而为的连续退格(纯 WDA 下没有元素模型——刻意设计)。- 从 Airtest 1.x 迁移?
connect_device("iOS:///http://...:8100")改为WdaClient("http://...:8100"),dev.driver.app_launch(...)改为client.app_launch(...)。 - 每个动作的完整行为见 平台支持矩阵。