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),启动会话前要先确认目标驱动已安装,否则会话创建会直接报错。