解锁 Appium Inspector:移动端 UI 自动化定位的利器

发布于:2025-08-13 ⋅ 阅读:(16) ⋅ 点赞:(0)

在移动端 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

  • 无线连接
  1. 电脑和 Android 设备连接到同一 WiFi 网络(确保在同一局域网内)。
  2. 设备已开启开发者选项USB 调试(在设置→开发者选项中开启)。
  3. 电脑已安装 ADB 工具,并配置好环境变量(确保adb命令可在任意目录执行)。
  4. 查看需要连接设备的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。


网站公告

今日签到

点亮在社区的每一天
去签到