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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93044.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93044.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93044.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习概念1

了解机器学习1、什么是机器学习机器学习是一门通过编程让计算机从数据中进行学习的科学 通用定义:机器学习是一个研究领域让计算机无须进行明确编程就具备学习能力 工程化定义:一个计算机程序利用经验E来学习任务T,性能是P,如果针…

前端html学习笔记5:框架、字符实体与 HTML5 新增标签

本文为个人学习总结,如有谬误欢迎指正。前端知识众多,后续将继续记录其他知识点! 目录 前言 一、框架标签 作用: 语法: 属性: 二、字符实体 作用: 三、html5新增标签 语义化 状态 列…

Day05 店铺营业状态设置 Redis

Redis 入门 Redis 简介 Redis 是一个基于内存的 key-value 结构数据库。 基于内存存储,读写性能高 适合存储热点数据(热点商品,资讯,新闻) 企业应用广泛 redis 中文网:Redis中文网 Redis 下载与安装 R…

Linux驱动开发probe字符设备的完整创建流程

一、 设备号分配1.静态分配通过register_chrdev_region预先指定设备号(需要确保未被占用)2.动态分配通过alloc_chrdev_region由内核自动分配主设备号,一般都是动态分配以避免冲突。3316 xxxx_dev.major 0; 3317 3318 if (xx…

生产环境中Spring Cloud Sleuth与Zipkin分布式链路追踪实战经验分享

生产环境中Spring Cloud Sleuth与Zipkin分布式链路追踪实战经验分享 在复杂的微服务架构中,服务调用链路繁杂,单点故障或性能瓶颈往往难以定位。本文结合真实生产环境案例,分享如何基于Spring Cloud Sleuth与Zipkin构建高可用、低开销的分布…

基于Python的《红楼梦》文本分析与机器学习应用

本文将详细介绍如何使用Python和机器学习技术对《红楼梦》进行深入的文本分析和处理,包括文本分卷、分词、停用词处理、TF-IDF特征提取以及文本可视化等关键技术。一、项目概述本项目的目标是对中国古典文学名著《红楼梦》进行全面的自动化处理和分析,主…

Bevy渲染引擎核心技术深度解析:架构、体积雾与Meshlet渲染

本文将深入探讨Bevy游戏引擎的渲染架构,重点分析其体积雾实现原理、Meshlet渲染技术以及基于物理的渲染(PBR)系统。内容严格基于技术实现细节,覆盖从底层渲染管线到高级特效的全套解决方案。一、Bevy渲染架构深度解析1.1 核心架构…

CASS11计算斜面面积

1.生成三角网2.工程应用--计算表面积--根据三角网

借助Rclone快速从阿里云OSS迁移到AWS S3

本文作者: 封磊 Eclicktech SA | AWS Community Builder DevTool | AWS UGL | 亚马逊云科技云博主 阿里云&InfoQ&CSDN签约作者 概述 随着企业云战略的调整和多云架构的普及,数据迁移成为了一个常见需求。本文将详细介绍如何使用Rclone工具,高效…

【入门系列】图像算法工程师如何入门计算机图形学?

作为图像算法工程师,入门计算机图形学(CG)有天然优势——你熟悉图像处理的像素级操作、数学工具(如矩阵运算)和优化思维,而图形学的核心目标(从3D信息生成2D图像)与图像处理有很强的…

淘宝API列表:高效获取商品详情图主图商品视频参数item_get

淘宝商品详情信息基本都是用图片展示的,制作精美,能更好的展示商品信息。如何通过API实现批量获取商品详情信息呢?1、在API平台注册账号,获取调用API的key和密钥。2、查看API文档,了解相关请求参数和返回参数。item_ge…

第23章,景深:技术综述

一,定义: 中景:物体聚焦的范围(即清晰成像的范围)。 景深:在中景之外,都会成像模糊,即景深。景深通常用来指示对场景的注意范围,并提供场景深度的感觉。 背景&#xff1a…

飞算 JavaAI -智慧城市项目实践:从交通协同到应急响应的全链路技术革新

免责声明:此篇文章所有内容都是本人实验,并非广告推广,并非抄袭,如有侵权,请联系。 目录 一、智慧城市核心场景的技术攻坚 1.1 交通信号智能优化系统的实时决策 1.1.1 实时车流数据处理与分析 1.1.2 动态信号配时…

GM3568JHF快速入门教程【二】FPGA+ARM异构开发板环境编译教程

SDK 可通过搭建好的 Docker 镜像环境进行编译。 具体参可考该部分文档内容。1 Docker镜像环境编译SDK1.1 SDK 自动编译命令切换到 Docker 内需要编译的 SDK 根目录,全自动编译默认是 Buildroot, 可以通过设置环境变量 RK_ROOTFS_SYSTEM 指定不同 rootfs.…

Vue3 整合高德地图完成搜索、定位、选址功能,已封装为组件开箱即用(最新)

Vue3 整合高德地图完成搜索、定位、选址功能(最新)1、效果演示2、前端代码2.1 .env.development2.2 GaodeMap.vue2.3使用示例1、效果演示 2、前端代码 2.1 .env.development https://console.amap.com/dev/key/app# 地图配置 VITE_AMAP_KEY "您的…

SpringBoot切换 Servlet 容器为Undertow

题目详细答案Spring Boot 默认使用 Tomcat 作为嵌入式的 Servlet 容器,但你也可以切换到 Undertow。Undertow 是一个轻量级、高性能的 Web 服务器和 Servlet 容器。步骤 1:排除 Tomcat 依赖需要在pom.xml文件(如果使用的是 Maven)…

通过限制对象的内存分配位置来实现特定的设计目标

《More Effective C》中的条款27聚焦于如何通过语言特性强制或禁止对象在堆上分配,其核心目标是通过控制内存分配位置来提升代码的安全性、可维护性和资源管理效率。 个人觉得,这个条款看看就可以了,可能在个别情况下需要考虑条款中说的情况。…

广东省省考备考(第七十四天8.12)——资料分析、数量关系(40%-70%正确率的题目)

资料分析 错题解析解析今日题目正确率:87% 数量关系:数学运算 错题解析解析备注: ①本题所求保护罩的表面积不包含底面。因为通常所说的“罩子”是没有底面的,即使罩子有底面,往往底面材质和罩子材质也不一样&#xff…

Java多源AI接口融合框架:动态模型切换与智能路由实战

> 在电商客服场景中,用户的一句“这件衣服适合夏天穿吗?”需要同时调用服饰知识库、天气API和风格推荐模型,但当GPT-4响应延迟时能否无缝降级到Claude?在预算有限时能否自动选择成本更低的本地模型? **多源AI接口整合已成为企业智能化落地的新基建**。据Gartner 2025报…

Linux中Docker redis介绍以及应用

一、NoSQL 1.1 单机mysql的美好时代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。 那个时候,更多的是静态网页,动态交互类型的网站不多。 上述架构上,我们来看看数据存储的瓶颈是什么&…