Appium — 是什么、工作原理及跨平台测试

作者: IT Sectr 发布日期: 2026-04-09 阅读时间: 8 分钟

Appium 是一个跨平台框架,用于自动化测试移动、Web 和桌面应用程序,基于 WebDriver 协议。它允许使用任何编程语言编写测试,并在 Android、iOS 和 Windows 上运行而无需修改代码。根据 Appium Foundation, 2025 的数据,WebDriver 协议为在不同平台上与应用程序交互提供了统一接口。

要点

  • Appium — 基于 WebDriver 的跨平台测试自动化框架
  • 统一 API 允许用 Java、Python、JavaScript、Ruby、C# 和其他语言编写测试
  • 平台支持 包括 iOS、Android、Windows 和 Web 应用程序
  • 黑盒方法 不需要访问应用程序源代码
  • Appium Server 充当测试和平台原生驱动程序之间的代理

什么是 Appium

Appium 是一个开源框架,用于自动化移动应用程序测试,基于客户端-服务器架构。Appium 服务器通过 WebDriver 协议从客户端接收命令,并将其委派给原生驱动程序:iOS 使用 XCUITest,Android 使用 UiAutomator2,Windows 使用 WinAppDriver。

历史与社区

Appium 创建于 2013 年,从此成为跨平台测试的行业标准。该项目由 Appium Foundation 管理,并得到大公司的支持:Sauce Labs、HeadSpin、Microsoft。全球每月有超过 50 万测试人员使用 Appium。

支持的应用程序类型

Appium 支持三种类型的应用程序:原生(iOS、Android、Windows)、移动 Web 浏览器(Safari、Chrome)和混合应用程序(原生外壳内的 WebView)。每种类型使用自己的上下文:NATIVE_APP、WEBVIEW 或 CHROMIUM。

Appium 和 WebDriver 架构

Appium 架构由四层组成:客户端代码 → Appium Client Library → Appium Server → 原生驱动程序。客户端库实现了 WebDriver 协议,并向服务器发送 HTTP 请求。服务器将其转换为平台原生驱动程序的命令。

WebDriver 协议

WebDriver 是 W3C 的浏览器自动化标准,由 Appium 针对移动设备进行了适配。每个操作 — 查找元素、点击、输入文本 — 都作为 HTTP 请求发送到服务器。例如,POST /session/{id}/element 创建一个新的测试会话。

会话和 Desired Capabilities

每个测试都通过 Desired Capabilities 对象创建会话开始。其中指定:platformName、deviceName、appPath、automationName 和其他参数。Appium 使用这些数据来选择适当的原生驱动程序并配置设备。

python
# Android 的 Desired Capabilities 示例
desired_caps = {
    'platformName': 'Android',
    'deviceName': 'Pixel_4',
    'app': '/path/to/app.apk',
    'automationName': 'UiAutomator2',
    'appPackage': 'com.example.app',
    'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

安装和配置 Appium

通过 npm 安装 Appium:npm install -g appium。安装后,需要为每个平台配置原生驱动程序:appium driver install xcuitest 和 appium driver install uiautomator2。使用 iOS 需要 Xcode,Android 需要 Android SDK。

Appium Inspector

Appium Inspector 是一个用于检查界面元素的图形工具。它连接到正在运行的 Appium 服务器,并显示 UI 组件的层次结构、它们的属性和定位器。Inspector 允许在编写测试之前检查选择器。

启动服务器

Appium 服务器使用 appium 命令启动,带有可选参数:端口、地址、日志记录。默认情况下,服务器监听端口 4723。为了并行运行多个设备,使用不同的端口或 Appium 集群。

bash
# 带日志记录的 Appium 服务器启动
appium \
  --port 4723 \
  --log-level debug \
  --use-plugins images \
  --base-path /wd/hub

在 Appium 中编写测试

Appium 测试使用 Page Object 模式组织代码。应用程序的每个屏幕都由一个单独的类描述,包含元素定位器和交互方法。Page Object 模型简化了界面变化时测试的维护,并在测试场景之间重用选择器。

元素定位器

Appium 支持多种元素查找策略:id、xpath、accessibilityId、className、androidUIAutomator 和 iOSClassChain。最推荐的是 accessibilityId 和 id — 它们在布局变化时保持稳定。XPath 仅应在没有其他定位器时使用。

java
// 登录界面的 Page Object
public class LoginPage {
    private AppiumDriver driver;

    private MobileElement emailField =
        (MobileElement) driver.findElement(MobileBy.AccessibilityId("emailInput"));
    private MobileElement passwordField =
        (MobileElement) driver.findElement(MobileBy.AccessibilityId("passwordInput"));
    private MobileElement loginButton =
        (MobileElement) driver.findElement(MobileBy.AccessibilityId("loginButton"));

    public void login(String email, String password) {
        emailField.sendKeys(email);
        passwordField.sendKeys(password);
        loginButton.click();
    }
}

使用手势和操作

Appium 通过 TouchAction 类或 W3C Actions API 支持复杂手势:滑动、多点触控、长按、滚动到元素。建议新项目使用新的 W3C Actions API,因为它是标准化的,并且在不同的平台版本上更稳定地工作。

Appium 与其他方案的比较

Appium 经常与 Detox、XCUITest 和 Espresso 进行比较。Appium 的主要优势是跨平台能力:一个测试可以在 iOS 和 Android 上运行而无需修改。然而,Detox 为 React Native 提供更好的同步,而 XCUITest/Espresso 为原生测试提供更快的执行速度。

何时选择 Appium

Appium 适用于需要为 iOS、Android 和 Web 提供统一框架的项目。对于使用 Java 或 Python 编写测试的团队来说不可或缺。对于有大量 E2E 测试的 React Native 项目,由于自动同步,最好考虑 Detox。

框架方法速度跨平台
Appium黑盒中等iOS、Android、Windows
Detox灰盒iOS + Android(React Native)
XCUITest白盒仅 iOS

Appium Grid 和云端测试

Appium Grid 是一个扩展,用于同时在多个设备上并行运行测试。Appium Grid 基于 Selenium Grid 构建,允许在多个 Appium 服务器之间分配测试,每个服务器管理自己的设备或模拟器集合。这对于大型项目至关重要,因为单台设备上的回归测试需要数小时 — Grid 将时间按节点比例缩短到分钟。

配置 Grid

配置 Grid 使用 JSON 格式的配置文件,其中描述了带设备的节点。每个节点指定:服务器端口、带平台的设备列表、操作系统版本和最大会话数。Hub 将测试分发到空闲节点,确保基础设施的最大利用率。

json
{
  "capabilities": [
    {
      "browserName": "android",
      "platformName": "Android",
      "deviceName": "Pixel_4",
      "platformVersion": "14.0",
      "maxInstances": 2
    }
  ],
  "configuration": {
    "port": 4724,
    "registerCycle": 5000
  }
}

云服务

如果自己的设备基础设施不可用,可以使用云服务:Sauce Labs、BrowserStack、LambdaTest。它们在云端提供数百个真实设备和模拟器。与 Appium 的集成非常简单:只需在 Desired Capabilities 中指定云端 hub 的 URL 和凭据,而不是 localhost。

并行执行

Appium 支持使用 TestNG(Java)或 pytest-xdist(Python)进行并行测试执行。并行化需要为每个会话提供唯一的端口和隔离的测试数据。每个线程在单独的设备或模拟器上启动自己的 Appium 会话。使用云服务时,并行化是自动的 — 平台自行将测试分发到可用设备,并在完成后释放它们。

Appium 诊断和调试

遇到 Appium 问题时,第一步是检查服务器日志(appium --log-level debug)。典型错误:端口被占用(指定其他 --port)、驱动程序版本不兼容、缺少 Android SDK 或 Xcode。对于 iOS,请确保 WebKitAgent 正在运行并且可以访问模拟器。

查找元素的问题

如果 Appium 找不到元素,请检查:上下文是否正确(NATIVE_APP vs WEBVIEW)、元素在屏幕上是否可见、是否需要滚动以及定位器是否正确。在插入测试之前,使用 Appium Inspector 进行交互式搜索和检查 XPath 表达式。此外,通过 WebDriverWait 启用等待元素出现也很有用 — 这解决了 UI 加载缓慢时的同步问题。

会话管理

会话的不正确结束是 Appium 测试不稳定的常见原因。始终在 finally 块中或通过 AutoCloseable 关闭驱动程序。发生错误时,使用强制 driver.quit()。对于 iOS,请确保 WebKitAgent(WDA)在会话之间重启,否则可能会出现 session not created 错误。为了在 CI 中监控会话状态,连接 Appium Dashboard 插件很有用,它可以实时可视化所有正在运行的测试的状态。

稳定性标志

为了提高测试稳定性,请使用:shouldTerminateApp(在测试之间关闭应用程序)、noReset(在会话之间保留数据)、autoGrantPermissions(自动授予系统对话框权限)。还建议通过 Developer Options 在设备上禁用动画

常见问题

Appium 支持哪些编程语言?

Appium 通过客户端库支持所有流行语言:Java、Python、JavaScript、Ruby、C#、PHP 和 Kotlin。每个库实现相同的 WebDriver 协议,允许用任何语言编写跨平台测试。

Appium 需要真机吗?

不需要,Appium 既可以在真实设备上运行,也可以在模拟器和仿真器上运行。Android 使用 Android Studio 模拟器,iOS 使用 Xcode 仿真器。真实设备仅用于测试硬件功能:传感器、NFC、摄像头。

Appium 1 和 Appium 2 有什么区别?

Appium 2 使用模块化架构完全重写,包含插件和单独的驱动程序。在 Appium 1 中,所有驱动程序都内置于服务器中。Appium 2 使用 appium driver install 命令安装驱动程序,使用 appium plugin install 命令安装插件。

Appium 如何找到屏幕上的元素?

Appium 使用搜索策略:By.id、By.xpath、By.accessibilityId、By.className、By.androidUIAutomator 和 By.iOSClassChain。为了速度,建议使用 accessibilityId — 它稳定且不依赖布局变化。

可以在 Appium 中测试 Web 应用吗?

可以,Appium 支持测试移动浏览器 — iOS 上的 Safari 和 Android 上的 Chrome。为此使用 WEBVIEW 或 CHROMIUM 上下文。测试通过标准 WebDriver 在浏览器中运行,类似于 Selenium。

总结

  • Appium — 基于 WebDriver 的跨平台 E2E 框架,支持 iOS、Android 和 Windows
  • 架构 客户端-服务器允许用 Java、Python、JavaScript、Ruby 和 C# 编写测试
  • Desired Capabilities 为特定平台和设备配置测试会话
  • Page Object 模型 推荐用于组织测试代码和重用选择器
  • Appium Inspector 帮助检查界面元素和选择定位器
  • 黑盒方法 不需要访问应用程序源代码
  • Appium 2 使用模块化架构,包含可安装的驱动程序和插件

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读