【简要笔记】Web-Driver-Agent 源代码分析

562 阅读2分钟

最近转行开始做云真机,这里简要的记录一下阅读 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

image.png

image.png

image.png

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 将请求路由到相应的命令处理器。
  • 返回结果: 命令处理器执行操作后,将结果返回给客户端。

未完待续...