最近转行开始做云真机,这里简要的记录一下阅读 WDA 源代码过程中的关键点。
WebDriverAgent (WDA) 是一个开源的 WebDriver server 实现,专为 iOS 设备设计。它允许通过 WebDriver 协议远程控制 iOS 应用程序。WDA 是 Facebook 开发的,并被广泛用于自动化测试框架,如 Appium。本文将分析 WebDriverAgent 的源代码,帮助理解其架构和工作原理。
模块描述
- HTTP Server: WDA 使用一个 HTTP 服务器来接收和处理来自客户端的请求。每个请求对应一个特定的 WebDriver 命令。
- Session Management: WDA 管理多个会话,每个会话代表一个与 iOS 设备的连接。会话管理器负责创建、维护和销毁会话。
- Command Handlers: 每个 WebDriver 命令都有一个对应的处理器。处理器负责解析请求、执行相应的操作,并返回结果。
- XCUI Test Framework: WDA 使用 Apple 的 XCUI Test 框架与 iOS UI 进行交互。XCUI 提供了访问和操作 UI 元素的 API。
关键组件分析
1. HTTP Server
WDA 的 HTTP 服务器是基于 RoutingHTTPServer 实现的。它监听特定端口(通常是 8100),并将请求路由到相应的处理器。
- 入口文件位于
WebDriverAgentLib/Routing/FBWebServer.m中
2. Session Management
会话管理是通过 FBSession 类实现的。每个会话包含一个唯一的会话 ID 和与之关联的设备信息。FBSession 负责启动和终止会话,并维护会话的状态。
3. Command Handlers
命令处理器是 WDA 的核心部分。每个命令处理器都实现了 FBCommandHandler 协议。常见的命令包括:
- Session Commands: 处理会话的创建、删除和查询。
- Element Commands: 处理 UI 元素的查找、点击、输入等操作。
- Gesture Commands: 处理手势操作,如滑动、捏合等。 这些命令通常在 FBCommandHandler 的子类中实现,如 FBElementCommands、FBSessionCommands 等。
4. XCUI Test Framework
WDA 通过 XCUIApplication 和 XCUIElement 类与 iOS UI 进行交互。XCUIApplication 代表一个正在运行的应用,而 XCUIElement 代表应用中的一个 UI 元素。WDA 使用这些类来执行 UI 操作,如点击、输入文本、获取元素属性等。
工作流程
- 启动服务器: WDA 启动时,初始化 HTTP 服务器并开始监听请求。
- 创建会话: 客户端发送请求创建一个新会话,WDA 通过 FBSession 创建并返回会话 ID。
- 执行命令: 客户端发送命令请求,WDA 将请求路由到相应的命令处理器。
- 返回结果: 命令处理器执行操作后,将结果返回给客户端。