当前位置: 首页 > 测试知识 > Appium Android软件测试自动化
Appium Android软件测试自动化
2026-05-11 作者cwb 浏览次数18

Appium是目前最主流的移动端开源自动化框架,支持Android原生、混合(Hybrid)和移动Web应用。


1. 架构

Appium 采用C/S方式:

客户端(脚本):用 Python、Java、JavaScript 等编写,通过WebDriver协议发送指令。

服务端(Appium Server):接收请求并翻译成特定平台的自动化指令。

Android 驱动:底层一般使用 UiAutomator2(Android 官方测试框架)来操控设备,绕过App签名限制,无需重新打包应用。

手机端会安装两个辅助控件:Appium Settings(管理网络、解锁等)和 io.appium.uiautomator2.server(监听指令),连接时自动安装。


2. 环境搭建

基础环境:安装Java JDK,配置环境变量;安装 Android SDK 并配置 ANDROID_HOME。


Appium 服务器:

方式一:使用桌面版 Appium Desktop,提供图形界面和元素查看器。

方式二:npm install -g appium 命令行启动。

驱动安装:appium driver install uiautomator2(Android 必装)。


设备连接:

真机:开启开发者方式、USB调试、允许安装通过USB的应用。

模拟器:如Android Studio自带的AVD。

测试连接:adb devices能看到设备序列号即为成功。

3.脚本(Python 示例)

准备参数主要用desired_caps,能力:


python

from appium import webdriver

from appium.options.android import UiAutomator2Options


options = UiAutomator2Options()

options.platform_name = "Android"

options.device_name = "你的设备名"          # 可任意命名

options.app_package = "com.example.app"     # 包名

options.app_activity = ".MainActivity"      # 入口Activity

# 或者直接用 app 参数指定 APK 途径


driver = webdriver.Remote("http://localhost:4723", options=options)


# 简单操作

driver.find_element_by_id("com.example:id/login_button").click()

driver.find_element_by_id("username").send_keys("testuser")

driver.quit()


注:现代Appium推荐使用options方式替代旧的字典形式。


4. 元素定位

Android上常用定位方法推荐度排序:

Accessibility ID(第一选择):最稳定,对应 Android 的 content-desc 属性。

// 例:driver.find_element_by_accessibility_id("搜索")

ID:通过 resource-id,一般形如 com.package:id/xxx。注意 ID 可能动态变化。

XPath:万能但性能消耗大,尽量用相对途径和属性组合。

Class Name:不常用,常需配合下标。

Android UIAutomator:当其他不行时,直接使用 UiAutomator API 的语法。

driver.find_element_by_android_uiautomator('new UiSelector().text("确定")')

Android DataMatcher:用于 Espresso 驱动,支持更复杂的一致。

使用 Appium Inspector:连接设备后,通过桌面端“Inspector”可实时查看元素树,一键生成定位器。


5. 高级操作

滚动查找元素:Android 推荐使用 UiAutomator 的 scrollable 配合 UiSelector,或直接用 mobile: scroll 手势。

滑动/缩放:通过 TouchAction 或更现代的 W3C Actions API。

上下文切换:混合应用(内含 WebView)需要从 NATIVE_APP 切换到 WEBVIEW_chrome,之后可像操作 Web 页面一样定位。


python

driver.switch_to.context("WEBVIEW_chrome")   # 按实际打印的 context 名称


权限弹窗处理:常通过 ID com.android.packageinstaller:id/permission_deny_button 或文本定位处理系统弹窗。

输入中文:通过 send_keys 直接输入,或在 caps 中添加 unicodeKeyboard: True。


6. 小程序和特殊应用测试关联

你之前问到小程序测试,Appium 也可以测微信小程序,但需要特殊配置:

先打开微信,通过 adb 命令或 Appium 操作进入小程序

由于小程序实质是 WebView,可通过 WebView 上下文进行操作,但限制较多

微信官方更推荐用 minium 做小程序自动化,但对于跨 App 的复杂流程,Appium 仍然是更灵活的选择


7. 踩坑和提效

包名和 Activity 获取:用 adb shell dumpsys window windows | grep mCurrentFocus 查看当前前台界面。

WebView 调试困难:必须保证手机端 Chrome 版本和 Appium 内 chromedriver 版本一致,可从 WebView 开发者方式中查看版本号并下载对应驱动。

执行慢:多用 ID/Accessibility ID,少用 XPath;避免全局全树扫描;使用显式等待 WebDriverWait 保证稳定性。

CI 集成:推荐在无头模拟器中运行,利用 Docker Android 镜像,结合 pytest 和 allure 报告。

Appium Android 自动化的整体思路就是:搭好环境-用 Inspector 定位元素-编写可维护的定位和操作思路-加入等待和异常处理。


文章标签: 自动化测试 软件测试
咨询软件测试