干货 | 移动端App自动化之App控件定位

news2024/11/7 15:36:47

客户端的页面通过 XML 来实现 UI 的布局,页面的 UI 布局作为一个树形结构,而树叶被定义为节点。这里的节点也就对应了我们要定位的元素,节点的上级节点,定义了元素的布局结构。在 XML 布局中可以使用 XPath 进行节点的定位。

App的布局结构

从上面这张图中可以看到最左侧是应用的页面的展示,中间部分展示了这个页面的树形结构的 XML 代码。

其中包含的内容为:

  • 节点 node

  • 节点属性:包括 clickable(是否可点击)、content-desc(内容)、resource-id(元素 id)、text(文本)、bounds(坐标)等。

通过ID定位

在 Android 系统元素的 ID 称为 resource-id,使用页面分析工具比如 Appium Inspector 能够获取元素的唯一标识是 ID 属性,可以使用 ID 进行元素定位,方便快捷。

示例代码如下:

driver.find_element(By.ID, \"android:id/text1").click()

注意 resource-id 对应的属性(包名:id/id 值),在使用这个属性的时候要把它当作一个整体。

通过Accessibility定位

当分析工具能抓取到的 content-desc 的属性值是唯一时,可以采用 Accessibility 的定位方式,示例代码:

driver.find_element_by_accessibility_id("Accessibility")

通过XPath定位

与 Selenium 类似,可以使用 XPath 的定位方式完成页面的元素定位。XPath 分为绝对路径定位与相对路径定位两种形式,下面介绍的都是相对定位的形式。

XPath:resource-id 属性定位

元素可以通过 resource-id 定位。

格式://*[@resource-id='resource-id属性']

示例代码:

driver.find_element(By.XPATH, \'//*[@resource-id="rl_login_phone"]')

XPath:text 属性定位

元素可以通过 text 文本属性定位。

格式:

//*[@text=’text文本属性’]

示例代码:

driver.find_element(By.XPATH,'//*[@text="我的"]')

XPath:class 属性定位

元素可以通过 class 定位。

格式:

//*[@class=’class 属性’]

示例代码:

driver.find_element(By.XPATH,\'//*[@class="android.widget.EditText"]')

XPath:content-desc 属性定位

元素可以通过 content-desc 定位。

格式:

//*[@content-desc='content-desc 属性']

示例代码:

driver.find_element((By.XPATH,\'//*[@content-desc="搜索"]')

uiautomatorviewer介绍

使用 Android SDK(sdk/tools/uiautomatorviewer)路径下自带的 uiautomatorviewer 工具也可以抓取当前页面的元素。

提前配置 sdk/tools/路径到环境变量 $PATH 中,直接在命令行输入下面的命令:

uiautomatorviewer

可以打开下面这样一个页面,点击页面左上角第二个图标(Android 手机图标),就可以获取下面的 uiautomatorviewer 快照图:

uiautomatorviewer 抓取快照展示出来的元素属性是经过解析的,我们要查看 XML DOM 的真实结构可以打印 pagesource ,得到的内容如下,红色框起来的部分为上图的定位的 XML DOM 中的一个节点:

通过图片分析,android.widget.TextView 是文本类型的节点,其中包含的属性信息都在上面的 uiautomatorviewer 快照图中有展示。如果只想定位 Android 系统的页面元素,可以直接使用 uiautomatorviewer,速度快并且不需要配置任何参数,直接点击获取页面的图标就可以将客户端页面抓取出来。

uiautomatorviewer 只能抓取 android8 以下的版本,如果要抓取 android8 以上的版本的页面信息,可以使用 Appium Inspector 或 WEditor哦~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring项目

1.创建一个Java项目 名字为Test_SM_1 2.导包 Java项目,用快捷方式的方法导入 web项目用复制的方式 一共8个包,前两个是通用jar包,Spring相关的jar包有4个,mybatis的jar包有1个,mysql的jar包连接数据库 3. 复原一个MyB…

Rabbitmq消息队列详解(一)——基础介绍

安装rabbitmq 本机: http://erlang.org.download/otp_win64_21.3.exe 一直next https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/:rabbitmq-server-3.7.14.exe 全选,next 进入RabbitMQ安装目录下的sbin目录 rabbitmq-plugins enable …

实操!用Zabbix+500元硬件如何平替5万元动环检测系统,实现UPS温湿度烟雾等数据采集存储、告警、大屏展示?

感谢本文作者 王志杰 。诚邀社区伙伴积极投稿! 前提 ►架构展示: ►大屏展示: ►所需软件: Zabbix Grafana 安装Zabbix-agent2的采集服务器 MThings串口调试软件 厂家自带UPS监控软件 USR-VCOM有人虚拟串口软件 ►所需硬件&a…

maven第二篇:IDE创建maven项目

前面将maven安装好了,当然起不会直接用,而是结合着一起用,那么现在就用IDE创建一个maven,来进行演示。 前提 IDE默认是带有maven软件,但是一般不习惯用起自带的,所以前提就是安装一个maven软件&#xff0…

HUAWEI CLOUD Stack 私有云解决方案(HCS)

HUAWEI CLOUD Stack 私有云解决(HCS) 注明: 本文介绍的版本为HUAWEI CLOUD Stack 6.5(也叫华为云Stack或HCS), 在华为6.5版本以前的名字是FusionCloud 6.3, 最近更新的8.0版本不会差别太大&…

Java开发学习(三十九)----SpringBoot整合mybatis

一、回顾Spring整合Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig 配置类 Configuration ComponentScan("com.itheima") PropertySource("classpath:jdbc.properties") Import({JdbcC…

Trie 字典树

Trie Trie,又称字典树或前缀树。是一棵有根的多叉树。用于高效存储和查找字符串集合。 字典树从根到树上某一结点的路径就是一个字符串。 一棵字典树的构造过程图解: 字典树的度和字符集有关,英文字符集是26个字母,那么字典树的…

通用vue组件化登录页面

一、首页设置大体的样式布局 1.首先建立一个login文件夹,在里面建立对应的login.vue文件 2.设置登录页面的背景图,在App.vue文件中使用router-view进行展示登录组件 3.先给App.vue的div元素设置高度100%,之后在login.vue里面去设置背景图 …

财务管理系统|基于Springboot开发实现公司财务管理系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

知识库软件应该具备的7个基本功能

SaaS公司最大的业务挑战是:如何留住客户,客户与你达成合作关系后,如何让其与你继续合作,达成长期合作关系。对于SaaS产品,丢失客户的成本是很昂贵的,赢得一个新客户的成本是留住现有客户的5到25倍&#xff…

Vue脚手架的使用

一、通过命令行使用vue-cli的指令创建 1. 安装:npm i -g vue/cli-init 2. 创建Vue项目(Vue2.0项目): ​ (1)创建文件夹:vue2-demo ​ (2)进入文件夹:cd v…

[Leetcode] 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后&#xf…

【 java 集合】Set 接口及常用实现类总结

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

JavaEE【Spring】:Spring事务和事务传播机制

文章目录前言一、Spring 中事务的实现1、MySQL 中的事务使用2、Spring 编程式事务(了解)3、Spring 声明式事务(自动)① Transactional 作用范围② Transactional 参数说明③ 注意事项Ⅰ. 抛出异常Ⅱ. 手动回滚④ Transactional ⼯…

2022年亚太地区大学生数学建模竞赛/2022年亚太杯1月加赛E题思路

问题1. 基本数据分析数据集中的OWID_WRL是什么?一般是指世界world。a) 哪些国家曾经拥有过核武器?现拥有核武器的国家有9个,分别为:美国、俄罗斯、英国、法国、中国、印度、巴基斯坦、以色列,朝鲜。曾经拥有核武的国家…

【python】导入同级、下级、上级目录中的模块

不想把代码都堆到一个文件里面,希望写的分层次,但又不是web框架,有入口文件和目录规则, 这个时候就要自己分包了,会遇到这个问题,明明ide智能追踪可以定位到包引用,但是却报错module undefine&a…

5G NR标准 第15章 上行功率和定时控制

第15章 上行功率和定时控制 上行链路功率控制和上行链路时序控制是本章的主题。 功率控制用于控制干扰,主要是针对其他小区的干扰,因为同一小区内的传输通常是正交的。 时序控制确保不同的设备以相同的时序接收,这是保持不同传输之间正交性…

Nacos设置为windows自启动服务

序言 众所周知,在 Windows 环境下想要启动 nacos 需要运行 bin 目录下的 startup.cmd。这样的启动方式需要保证 cmd 窗口一直开着,只要把这个窗口关掉,nacos 服务就停了。 所以为了避免人为的误关窗口,把 nacos 注册成一个 wins…

【可视化】无法理解PCA,条件概率,最小二乘回归?可视化帮你!

主成分分析PCA2D示例首先,只考虑两个维度的数据集,比如高度和重量。这个数据集可以绘制成平面上的点。但如果想要整理出变量,PCA会找到一个新的坐标系,其中每个点都有一个新的(x,y)值。坐标轴实际上没有任何物理意义。它们是高度和…

【JavaScript】如何转换blob数据与file文件还有url

大家好,关于blob对象和file对象有了解多少呢,它们都是一种文件的表示形式,文件之间是可以互相转换的,顺带一提,还有经常用到的临时文件路径tempFileURL。 文章目录文件类型Blob对象File对象URL临时路径文件类型 首先&…