在移动端 UI 自动化测试中,元素定位是绕不开的核心环节。无论是 Android 还是 iOS 应用,能否精准、高效地定位到界面元素,直接决定了自动化脚本的稳定性和可维护性。而 Appium Inspector 作为 Appium 生态中专门用于元素定位的工具,凭借其直观的可视化界面和强大的元素分析能力,成为了测试工程师的得力助手。今天,我们就来深入聊聊 Appium Inspector 的使用方法,以及如何用它提升自动化测试效率。
一、什么是 Appium Inspector?
简单来说,Appium Inspector 是一款用于查看移动端应用界面元素属性、获取元素定位表达式的可视化工具。它可以连接真实设备或模拟器,实时同步应用界面,并通过点击界面元素的方式,自动解析出元素的 ID、class、xpath 等属性,帮助测试工程师快速生成可用的定位表达式。
与传统的命令行调试或代码中硬编码定位相比,Appium Inspector 的优势在于:
- 可视化操作:所见即所得,直接在界面上点击元素即可查看属性,无需反复修改代码调试;
- 多平台支持:同时兼容 Android 和 iOS 系统,统一了不同平台的元素定位流程;
- 定位方式丰富:支持 ID、class name、xpath、 accessibility id 等多种定位策略,并能自动生成对应表达式;
- 实时交互:可以在工具中直接对元素执行点击、输入等操作,验证定位的有效性。
二、准备工作:环境搭建与配置
在使用 Appium Inspector 前,需要先完成基础环境配置,确保工具能正常连接设备并获取界面信息。
1. 基础依赖安装
Appium Server:Inspector 需要与 Appium Server 配合使用,需先安装 Appium(推荐通过 npm 安装:npm install -g appium);
移动端环境:
Android:安装 Android SDK,配置ANDROID_HOME环境变量,确保adb命令可正常使用;
iOS:需在 Mac 环境下,安装 Xcode 及 Command Line Tools,配置 iOS 开发环境;
设备 / 模拟器:准备一台已开启调试模式的 Android 设备(或模拟器),或 iOS 设备(需通过 Xcode 配置)。
2. 启动 Appium Server
打开终端,输入appium命令启动服务,默认端口为 4723。启动成功后会显示类似如下信息:
3.安装Appium Inspector
Appium Inspector是appium自带的一个元素定位工具,可以通过以下链接进行安装。
下载地址:https://github.com/appium/appium-inspector/releases
安装后打开就是上图的样子
注意事项:
1.Appium Inspector 与 Appium Server 的版本兼容
Appium Inspector( Inspector )是 Appium 生态的一部分,其功能依赖 Appium Server 提供的接口,两者版本需 “对应”:
- 若使用 Appium Server 2.x(目前主流版本),需搭配 Appium Inspector 2.x 及以上(推荐最新版,如 2023 年后的版本),因为 2.x 版本引入了新的驱动架构(如 UiAutomator2、XCUITest 驱动需单独安装),旧版 Inspector 可能不支持。
- 若使用 Appium Server 1.x(老旧版本,已逐步淘汰),需搭配 Appium Inspector 1.x,新版本 Inspector 可能无法识别 1.x Server 的接口格式。
查看版本方法:
- Appium Server:启动后在日志或命令行输入 appium --version 查看。
- Appium Inspector:打开后在 “关于” 或设置中查看版本号。
2.与测试设备系统版本的匹配
不同系统版本(尤其是 iOS)对 Inspector 的兼容性要求严格:
- Android:兼容性较强,只要 Inspector 支持对应版本的 UiAutomator2 驱动(通常随 Appium Server 安装)即可,无需严格匹配系统版本(如 Android 10-14 均可兼容最新 Inspector)。
- iOS:需特别注意,因为 Inspector 依赖 XCUITest 框架(苹果官方测试框架),而 XCUITest 版本与 iOS 系统版本强绑定:
- 若测试 iOS 15 及以上,需使用 Appium Inspector 2.x + Appium Server 2.x + XCUITest 驱动最新版。
- 若测试老旧 iOS 设备(如 iOS 12 及以下),可能需要降低 Inspector 和 Server 版本(如 Appium 1.22.x + 对应旧版 Inspector)。
三、连接设备与应用:Desired Capabilities 配置
要让 Inspector 连接到目标设备和应用,需要通过Desired Capabilities(期望能力)定义设备和应用的基本信息。这是一组键值对,用于告诉 Appium Server“要连接什么设备、启动哪个应用”。
1. 常用 Capabilities 参数
平台相关:
- platformName:设备平台(Android或iOS);
- platformVersion:设备系统版本(如 Android 13、iOS 16.1);
- deviceName:设备名称(Android 可通过adb devices查看,iOS 可在 Xcode 中查看);
应用相关:
- appPackage(Android):应用的包名(如微信的包名为com.tencent.mm);
- appActivity(Android):应用的启动 Activity(如微信的启动 Activity 为.ui.LauncherUI);
- app(通用):应用安装包的本地路径(适用于未安装应用的情况,会自动安装);
其他:
- noReset:是否保留应用状态(true表示不重置,适合测试已登录状态);
- automationName:自动化引擎(Android 默认UiAutomator2,iOS 默认XCUITest)。
2. 在 Inspector 中配置 Capabilities
打开 Appium Inspector(可通过 Appium Desktop 启动,或访问Appium Inspector Web 版),在左侧 “Desired Capabilities” 区域填入参数,例如 Android 应用的配置:
{
"platformName": "Android",
"appium:automationName": "uiautomator2",
"appium:deviceName": "9b133dfd",
"appium:platformVersion": "10",
"appium:appPackage": "com.pczn.app",
"appium:appActivity": ".MainActivity",
"appium:noReset": true,
"appium:autoGrantPermissions": true
}
配置完成后,点击 “Start Session”,Inspector 会通过 Appium Server 连接设备并启动应用,成功后将显示应用的实时界面。
3.查看连接设备以及软件的包名和活动名
- 有线设备连接
通过带数据传输的USB线进行连接,随后在命令行输入以下命令
adb devices
- 无线连接
- 电脑和 Android 设备连接到同一 WiFi 网络(确保在同一局域网内)。
- 设备已开启开发者选项和USB 调试(在设置→开发者选项中开启)。
- 电脑已安装 ADB 工具,并配置好环境变量(确保
adb
命令可在任意目录执行)。 - 查看需要连接设备的IP地址
adb connect 192.168.1.105:5555 # 替换为你的设备IP和端口
- 查看软件的包名和活动名
adb shell dumpsys window | findstr "mCurrentFocus"
从输出结果可以看到,当前设备前台打开的应用信息如下:
appPackage(应用包名):
com.eg.android.AlipayGphone
这是支付宝(Alipay)的官方包名,通过包名可以确认当前打开的是支付宝应用。appActivity(当前活动页面):
com.eg.android.AlipayGphone.AlipayLogin
这表示当前显示的是支付宝的登录页面(AlipayLogin
清晰标识了页面功能)。
如果需要用 Appium 操作当前打开的支付宝登录页,在 desiredCapabilities 中配置以下参数即可:
{
"platformName": "Android",
"appium:automationName": "uiautomator2",
"appium:deviceName": "你的设备标识",
"appium:platformVersion": "系统版本",
"appium:appPackage": "com.eg.android.AlipayGphone",
"appium:appActivity": ".AlipayLogin", // 可简写为相对路径
"appium:noReset": true,
"appium:autoGrantPermissions": true
}
四、核心功能:元素定位与操作
连接成功后,Appium Inspector 的界面主要分为三部分:左侧的可视化界面、中间的元素树、右侧的元素属性面板。
1. 定位元素的 3 种方式
1.1 通过 ID 定位(最推荐,稳定性高)
原理:利用元素的 resource-id 属性定位,这是 Android 应用开发中通常会设置的唯一标识(类似 HTML 中的 id)。
适用场景:元素有明确且唯一的 resource-id 时(如按钮、输入框等)。
操作示例:
- Appium Inspector 中:在元素详情面板找到 resource-id(如 com.pczn.app:id/login_btn),直接选择 “ID” 定位方式。
- 代码中(Python 示例):
from appium.webdriver.common.appiumby import AppiumBy
# 定位 ID 为 "com.pczn.app:id/login_btn" 的元素
login_button = driver.find_element(by=AppiumBy.ID, value="com.pczn.app:id/login_btn")
login_button.click() # 点击该元素
1.2 通过 XPath 定位(灵活性最高,适用范围广)
原理:通过元素的层级结构、属性(如文本、class、ID 等)组合定位,类似 XML 路径查询。
适用场景:元素无唯一 ID、需要通过相对位置或多个属性筛选时(如列表项、动态生成的元素)。
- 常用 XPath 语法:
- 精确匹配文本://*[@text="登录"](定位文本为 “登录” 的元素)
- 匹配包含特定文本://*[contains(@text, "登录")](定位文本包含 “登录” 的元素)
- 结合 ID 和 class://android.widget.Button[@resource-id="com.pczn.app:id/login_btn"]
代码示例(Python):
# 定位文本为“登录”的按钮
login_button = driver.find_element(by=AppiumBy.XPATH, value='//*[@text="登录"]')
login_button.click()
1.3. 通过 Accessibility ID 定位(适用于无障碍设计的元素)
原理:利用元素的 content-desc 属性(无障碍描述)定位,主要用于辅助功能,通常具有语义化含义。
- 适用场景:元素设置了 content-desc 且唯一时(如 “返回” 按钮、“关闭” 图标)。
- Appium Inspector 中:在元素详情找到 content-desc(如 “返回主页”),选择 “Accessibility ID” 定位。
代码中(Python 示例):
# 定位 content-desc 为“返回主页”的元素
back_button = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="返回主页")
back_button.click()
2. 生成定位表达式
选中元素后,右侧面板的 “Selected Element” 区域会显示多种定位策略的表达式,直接复制即可用于自动化脚本:
- id:优先推荐,如id("com.tencent.mm:id/btn_login");
- xpath:适合复杂场景,如//android.widget.Button[@text="登录"];
- class name:需注意可能存在多个相同 class 的元素;
- accessibility id:适合支持无障碍标签的元素(Android 的content-desc属性)。
3. 实时操作元素
在右侧 “Actions” 面板中,可以对选中的元素执行简单操作,验证定位是否有效:
- Click:模拟点击;
- Send Keys:输入文本(适用于输入框);
- Clear:清空输入框内容;
- Get Text:获取元素文本,验证显示是否正确。
五、进阶技巧:提升定位效率
1. 处理动态元素
部分应用的元素属性(如resource-id)会随版本更新变化,或包含随机字符(id="btn_12345"),此时可通过以下方式定位:
用contains模糊匹配://*[contains(@resource-id, "btn_")];
结合多个属性定位://android.widget.Button[@text="登录" and@class="android.widget.Button"];
利用父节点或兄弟节点层级关系://*[@id="parent"]/android.widget.Button[2]。
2. 切换上下文(WebView/H5 页面)
若应用包含 H5 页面(如微信小程序、内嵌网页),需先切换到 WebView 上下文:
在 Inspector 顶部的 “Context” 下拉框中,选择包含WEBVIEW_前缀的上下文;
切换后,元素定位方式与网页端一致(支持css selector等)。
3. 保存与加载会话
对于频繁测试的应用,可通过 “Save Session” 保存当前配置,下次直接 “Load Session” 快速启动,无需重复配置 Capabilities。