
如何为 Midscene 配置远程 iOS 设备的自定义 WebDriverAgent Host 与端口【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midsceneMidscene 通过 WebDriverAgentWDA连接 iOS 设备。默认的wdaHost是localhostwdaPort是8100。当 WDA 运行在其他机器上远程设备或自建 WDA 部署或者一台机器上同时驱动多台设备时默认的 host 和端口就无法满足需求。本文说明如何在 Midscene 的 iOS 集成中指定自定义的 WebDriverAgent Host 与端口覆盖 JavaScript SDK 和 YAML 脚本两种用法并给出验证方式。前提条件在配置自定义 Host 与端口之前先确保 WDA 服务本身可用。根据 iOS 平台指南 和其中的环境准备说明需要 macOS 环境iOS 开发要求以及 Xcode 和 Xcode command line tools。WebDriverAgent 版本要求 7.0.0。真机需要在设备上手动开启开发者模式Settings Privacy Security Developer Mode和 UI AutomationSettings Developer UI Automation并让设备信任当前 Mac模拟器则默认开启这两项。真机连接需要端口转发工具iproxy模拟器不需要。WDA 配置完成后用状态端点验证服务是否可用访问http://localhost:8100/status能收到如下结构的 JSON文档示例实际值会不同即表示 WDA 已正常工作{ value: { message: WebDriverAgent is ready to accept commands, state: success, ready: true }, sessionId: BCAD9603-F714-447C-A9E6-07D58267966B }如果你最终把wdaHost指向远程主机这个验证应在对应的host:port/status上进行。在 JavaScript SDK 中配置 wdaHost 与 wdaPort自定义 Host 与端口通过两个参数传递wdaPort?: number— WebDriverAgent 端口默认8100。wdaHost?: string— WebDriverAgent host默认localhost。API 参考中明确说明使用wdaHost/wdaPort可以指向远程设备或自建的 WDA 部署。有两种等价的配置方式来自 iOS 指南 FAQ// Method 1: Using IOSDevice const device new IOSDevice({ wdaPort: 8100, // Custom port wdaHost: 192.168.1.100 // Custom host }); // Method 2: Using convenience function (recommended) const agent await agentFromWebDriverAgent({ wdaPort: 8100, // Custom port wdaHost: 192.168.1.100 // Custom host });IOSAgent也可以直接接收一个已配置的IOSDevice实例先new IOSDevice({ wdaPort, wdaHost })再new IOSAgent(page, {...})并await page.connect()。两种方式传入的都是同一组设备选项。如果还需要使用 Playground 实时画面的原生 MJPEG 流注意 MJPEG 有独立端口wdaMjpegPort默认9100多设备并发时文档要求为每台设备使用不同的wdaPort和wdaMjpegPort避免 WDA 命令和 MJPEG 流端口冲突。远程真机先用 iproxy 做端口转发针对远程设备Midscene 的文档给出的配套步骤是在 Mac 上设置端口转发iproxy 8100 8100 YOUR_DEVICE_ID这里YOUR_DEVICE_ID是文档中保留的占位符需要替换为你自己的设备 ID8100 8100分别是本地监听端口和 WDA 侧端口。如果 WDA 实际监听在其他端口两个位置应改为对应的本地/远端端口并且脚本中的wdaPort要填写本地一侧的端口wdaHost保持localhost。文档同时说明模拟器不需要 iproxy。启用原生 MJPEG 流时同理转发 WDA MJPEG Server 端口默认 9100# Required for real devices only (simulators dont need this) iproxy 9100 9100 YOUR_DEVICE_IDPlayground 启动时会自动探测 9100 端口探测成功时日志显示MJPEG: streaming via native WDA MJPEG server否则自动回退到轮询截图模式。运行脚本并验证结果以 SDK 示例脚本为例保存为./demo.ts模型环境变量按 模型配置说明 配置后用npx tsx demo.ts运行import { IOSAgent, IOSDevice, agentFromWebDriverAgent } from midscene/ios; const page new IOSDevice({ wdaPort: 8100, wdaHost: 192.168.1.100, // 你的自定义 WDA host }); const agent new IOSAgent(page, { aiActionContext: If any location, permission, user agreement, etc. popup appears, click agree., }); await page.connect(); await agent.aiAct(Search for Headphones); await agent.destroy();page.connect()成功建立连接随后aiAct等动作能正常执行即说明自定义 Host 与端口配置生效。脚本结束后控制台应出现Midscene - report file updated: /path/to/report/some_id.html路径为实际生成路径在浏览器打开该 HTML 可以回放每次交互、查询和断言。在 YAML 脚本中配置 wdaHost 与 wdaPort如果任务是 YAML 脚本而不是 TS 脚本配置位置在脚本顶部的ios部分来自 YAML 脚本指南ios: # WebDriverAgent port, optional, defaults to 8100. wdaPort: port # WebDriverAgent host address, optional, defaults to localhost. wdaHost: hostport和host替换为你的实际端口和主机地址。该部分还支持IOSDevice构造函数支持的其他选项如autoDismissKeyboard、launch等。也可以通过 CLI 参数一次性覆盖整批脚本的设置来自 YAML 脚本运行器文档--ios.wdaPort port: Overrideios.wdaPortfor all scripts.--ios.wdaHost host: Overrideios.wdaHostfor all scripts.命令行参数的优先级高于配置文件--config和脚本内的ios部分配置文件的字段会深度合并到每个脚本上。连接异常时检查什么文档给出的真机排查清单来自 iOS 指南 FAQ开发者模式是否在 Settings Privacy Security Developer Mode 中开启UI Automation 是否在 Settings Developer UI Automation 中开启设备是否信任当前 Mac若配置指向远程/真机iproxy端口转发是否已建立转发端口与脚本中的wdaPort是否一致。另注意真机与模拟器的差异真机必须手动开启开发者模式和 UI Automation 设置且需要 iproxy模拟器这两项默认开启也不需要端口转发。若 WDA 状态端点本身无法访问应先按前提条件一节处理 WDA 配置再回到wdaHost/wdaPort的组合。参考资料iOS 平台指南WDA 准备、Playground、FAQ含自定义 WDA 端口与 host 一节API 参考iOS 章节IOSDevice完整选项与agentFromWebDriverAgent()YAML 自动化脚本ios配置段YAML 脚本运行器--ios.wdaPort/--ios.wdaHost命令行覆盖【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考