首页/开发/软件测试速查/Appium 移动端自动化
自动化测试66 条

Appium 移动端自动化

Appium 基于 WebDriver 协议扩展出移动端自动化:用 capabilities 指定平台与设备(platformName、deviceName、app),Android 走 UiAutomator2、iOS 走 XCUITest 驱动。

软件测试速查开发更新于 2026-10-13

Appium 是什么

Appium 是开源的移动端 UI 自动化框架,基于 WebDriver 协议扩展:用 capabilities 声明平台与设备,Android 通过 UiAutomator2 驱动、iOS 通过 XCUITest 驱动,脚本可用 Java、Python、JS 等语言编写,同一套接口覆盖两个平台。它在应用外层操作界面,不要求修改被测应用,因此原生、混合应用与移动网页都能测。

基本信息

定位跨平台移动端 UI 自动化,遵循 WebDriver 协议
核心驱动Android 用 UiAutomator2,iOS 用 XCUITest
关键配置platformName、deviceName、app 或 appPackage 与 appActivity
服务端Appium Server 默认监听 4723 端口,客户端通过 Remote 连接
语言支持Java、Python、JavaScript、C# 等官方客户端库

典型使用场景

  • 移动回归:把核心流程(登录、下单、支付)自动化后按版本执行
  • 机型兼容抽查:同一组用例在多个机型与系统版本上运行
  • 混合应用测试:在原生控件与 WebView 上下文之间切换
  • 真机集群:配合设备云或本地设备农场并行执行
  • 发版冒烟:自动完成安装、启动与关键链路验证
  • 缺陷复现固化:把线上问题写成自动化用例防复发

启动会话(Python)

启动会话(Python)
from appium import webdriver as appium_webdriver
from appium.options.android import UiAutomator2Options
options = UiAutomator2Options().load_capabilities({
    "platformName": "Android",
    "deviceName": "Pixel_7",
    "app": "/path/app-debug.apk",   # 也可用 appPackage 与 appActivity 启动已装应用
})
driver = appium_webdriver.Remote("http://localhost:4723", options=options)
driver.find_element("accessibility id", "login").click()   # 语义定位优先于坐标
driver.quit()

常用能力项

能力项含义注意点
platformName平台:Android 或 iOS必填
deviceName设备名或序列号多设备并行时需唯一
app安装包路径,测试时自动安装与 appPackage 方案二选一
automationName驱动名:UiAutomator2 或 XCUITest按平台选择,影响定位能力
noReset是否保留应用状态直接影响用例间隔离性
真机与模拟器的元素层级差异较大,定位与等待逻辑必须在目标设备上验证;iOS 真机还需要签名与 WebDriverAgent,环境准备成本通常高于 Android。
Appium 2 起把驱动拆成可安装插件(如 appium driver install uiautomator2),启动会话前要先确认目标驱动已安装,否则会话创建会直接报错。

易错点

  • 照搬浏览器端等待策略:移动端渲染与页面切换机制不同,随处隐式等待会造成大量不稳定用例
  • 坐标点击硬编码:分辨率或布局一变全部失效,应优先使用 accessibility id 等语义定位
  • 每台设备各起一个 Appium 服务:端口与设备映射混乱,应集中用 Grid 或设备云管理
  • 用例间共享应用状态:登录态与缓存互相污染,要设计清理策略或每次独立启动
  • 忽略真机与模拟器差异:模拟器通过而真机失败是常见现象,关键链路必须在真机回归

数据来源与参考

  • Appium 官方文档(appium.io)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌