APP自动化测试(14)-利用xpath定位元素

news2024/9/29 15:51:53

一、元素定位的困难

        定位元素时有时无法准确定位到我们想要的元素,存在如下几种情况

1、通过一个条件无法准确定位到元素,需要进行条件组合

2、某元素无法唯一定位到,但是同级的其他元素可以唯一定位

3、某元素的属性无论如何组合都无法唯一定位,但是其所在上层节点下的另外一个节点可以通过元素定位到,而该元素的某些属性在这个上层节点可以唯一定位

如上情况我们用ID、Text等方式都无法定位,此时就需要利用xpath的各种组合来实现了。

二、基础定位

所谓基础定位就是指通过一个元素属性可以准确定位到元素,此时用xpath一个属性即可定位到,如下图我们要定位到招商银行,属性如下

如上图,假如通过text =招商银行、resource-id=com.mymoney:id/title_tv、class =android.widget.TextView都可以定位到,那我们用如下代码可以实现相同的元素定位。

#假如通过text =招商银行、resource-id=com.mymoney:id/title_tv、class =android.widget.TextView都可以定位到
#利用class的属性,并通过xpath定'
element1 = driver.find_element(AppiumBy.XPATH,'//android.widget.TextView')
#利用resource-id定位元素
element2 = driver.find_element(AppiumBy.XPATH,'//[@resource-id="com.mymoney:id/title_tv"]')
#利用text定位元素
element2 = driver.find_element(AppiumBy.XPATH,'//[@text="招商银行"]')

 三、组合定位

还是上面的招商银行定位,假如可以通过其中两个元素才能定位到该元素,那我们可以两个条件组合使用(也可以多个条件组合)

#假如通过text =招商银行、resource-id=com.mymoney:id/title_tv、class =android.widget.TextView其中2个条件组合才可以定位到元素
#利用class和resource-id属性,并通过xpath定'
element1 = driver.find_element(AppiumBy.XPATH,'//android.widget.TextView[@resource-id="com.mymoney:id/title_tv"]')
#利用class和text定位元素
element2 = driver.find_element(AppiumBy.XPATH,'//android.widget.TextView[@text="招商银行"]')
#利用resource-id和text定位元素
element3 = driver.find_element(AppiumBy.XPATH,'//*[@resource-id="com.mymoney:id/title_tv" and @text="招商银行"]')

四、层级定位

当无论条件怎么组合都无法定位到元素,但是其上层的某个下层元素可以定位。

 

如上图,我们要定位招商银行右侧的余额数字,而余额数字通过resource-id、text、class属性不管怎么组合都无法准确定位。但是我们可以通过如下几点定位到

1、定位到招商银行这个元素

2、定位到招商银行上两层的爷爷节点,这个节点是招商银行和余额文本共同的上层节点

3、定位到的该节点下,通过resource-id就可以定位到余额了

定位代码如下

# 通过resource-id和text定位到招商银行的元素
zhaoshangyinhang = driver.find_element(AppiumBy.XPATH,'//*[@resource-id="com.mymoney:id/title_tv" and @text="招商银行"]'
# 定位到上两层节点的元素 (加一个 /.. 表示xpath往上一层)
father_element =  driver.find_element(AppiumBy.XPATH,'//*[@resource-id="com.mymoney:id/title_tv" and @text="招商银行"]/../..')
#通过定位到的上层节点定位余额文本,余额文本的resource-id='com.mymoney:id/money_tv'
ye_element = father_element.find_element(AppiumBy.XPATH,'//*[@resource-id="com.mymoney:id/money_tv"]')

#可以通过如下xpath直接实现
xpath = '//*[@resource-id="com.mymoney:id/title_tv" and @text="招商银行"]/../..//*[@resource-id="com.mymoney:id/money_tv"]'

 

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

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

相关文章

训练机器学习模型,可使用 Sklearn 提供的 16 个数据集 【下篇】

数据是机器学习算法的动力,scikit-learn或sklearn提供了高质量的数据集,被研究人员、从业人员和爱好者广泛使用。Scikit-learn(sklearn)是一个建立在SciPy之上的机器学习的Python模块。它的独特之处在于其拥有大量的算法、十分易用…

AOP使用场景记录总结(缓慢补充更新中)

测试项目结构: 目前是测试两个日志记录和 代码的性能测试 后面如果有其他的应用场景了在添加.其实一中就包括了二,但是没事,多练一遍 1. 日志记录 比如说对service层中的所有增加,删除,修改方法添加日志, 记录内容包括操作的时间 操作的方法, 方法的参数, 方法所在的类, 方法…

CSS :autofill 如何覆盖浏览器自动填充表单的样式

CSS :autofill 如何覆盖浏览器自动填充表单的样式 :autofill 伪类匹配浏览器自动填充值的 input 元素. 如果用户继续编辑这个元素内容就会停止匹配. #name:autofill {background-color: red !important;border: 6px solid red; } #name:-webkit-autofill {background-color: …

OpenAI-ChatGPT最新官方接口《审核机制》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(七)(附源码)

Moderation 审核机制前言Introduction 导言Quickstart 快速开始其它资料下载ChatGPT 作为一个大型人工智能语言模型,在提供用户便捷交流的同时也承担着内容审核的责任。为了保护用户和社会免受不良信息的影响,ChatGPT 特别注重关于内容的审核。当用户发送…

UDS统一诊断服务【五】诊断仪在线0X3E服务

文章目录前言一、诊断仪在线服务介绍二、数据格式2.1,请求报文2.2,子功能2.3,响应报文前言 本文介绍UDS统一诊断服务的0X3E服务,希望能对你有所帮助 一、诊断仪在线服务介绍 诊断仪在线服务比较简单,其功能就是告诉服…

winForm目录文件介绍

先看项目结构 引用:添加引用,选择自己需要的程序集添加 app.config:配置文件 form1.cs:窗体文件,创建一个窗体所要具备的文件 program:程序入口点 再看创建项目后各个文件夹的含义 .sln:解决方案文件,…

网络模型-网络体系结构(OSI、TCP/IP)

网络模型(网络体系结构)网络模型网络的体系结构OSI模型TCP/IP模型OSI和TCP/IP模型对应关系图常见网络协议网络模型 网络的体系结构 1、网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。 …

智慧果园系统——以水肥一体化系统功能为基础实现智慧果园系统项目 需求文档

文章目录一、引言1.文档的作用2.文档的标准3.产品的范围二、综合描述1.项目前景2.项目目标3.项目功能4.调研和面谈A.硬数据采样a)硬数据分析的形式b)定量硬数据c)定性硬数据B.面谈a)第一次面谈:开放式问题b)第二次面谈:封闭式问题+开放性问题…

NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029

然后我们实际操作一下如何把mysql中的数据同步到hdfs中去,这里注意,这里是查询mysql中的表中的数据,然后放到 hdfs中去,并不是说,如果mysql数据表中的数据变化了,就自动同步到hdfs,这个功能后面我们再说,这是增量同步 用到的是其他的处理器 首先我们创建一个处理器组mysqlto…

【行为型模式】迭代器模式

文章目录1、简介2、结构3、实现方式3.1、案例引入3.2、结构分析3.3、具体实现4、迭代器模式优缺点5、应用场景1、简介 迭代器模式(Iterator)是一种行为设计模式,它允许我们遍历一个复杂的集合对象而无需暴露其内部表示。它提供了一种统一的方式来访问一个聚合对象中…

在docker上安装MySQL和Redis

1. 通过docker命令下载mysql5.7镜像mysql5.7前期准备2. 通过docker命令下载mysql8.0镜像mysql8.0前期准备 3. 通过docker命令下载redis镜像redis前期准备 本文永久更新地址: 1. 通过docker命令下载mysql5.7镜像 mysql5.7前期准备 在Linux虚拟机上创建一个文件夹用来持久化数据…

replugin原理笔记

Replugin源码目录主要有4个工程组成,其组成如下图所示,包括2个gradle工程,2个Android library工程。 replugin-host-gradle replugin-host-library replugin-plugin-gradle replugin-plugin-library Replugin是一套完整的、稳定的、适合全面…

C++ 基础回顾(下)

C 基础回顾(下) 目录C 基础回顾(下)前言模板和泛型编程动态内存与数据结构动态内存数据结构继承与多态继承多态简单的输入输出工具与技术命名空间异常处理多重继承与虚继承时间和日期前言 C之前学过一点,但是很长时间…

进销存管理系统是什么?进销存管理系统优点?

库存管理不当导致物资浪费/过期/损坏,增加企业成本和风险; 无法有效监控销售和采购流程,交易的准确性和时效性不到位; 财务管理混乱; ...... 你是否遇到过以上问题? 进销存管理系统(Inventory …

Softing FG-200——将FF H1现场总线集成到工业以太网

基金会现场总线FF(FOUNDATION Fieldbus)是专为过程自动化设计的通信协议,包含低速总线H1(31.25kbits/s)标准和高速以太网HSE(High Speed Ethernet,100Mbits/s)标准。FF H1主要针对于…

200左右蓝牙耳机有哪些推荐?质量好的平价蓝牙耳机分享

现在蓝牙耳机基本上都是人手必备的存在了,对比上千元的蓝牙耳机,两百左右价位蓝牙耳机才是更多人的优先选择、废话不多说,下面我就来为大家推荐几款200元上下,质量和口碑都好的蓝牙耳机,准备入手蓝牙耳机的小伙伴可以作…

Mac配置QT

Mac配置QT 前言: 系统版本:Ventura 13.2.1 (22D68) 先安装homebrew,参考: https://blog.csdn.net/ZCC361571217/article/details/127333754 Mac配置: 安装Qt与Qt Creator: 通过Homebrew安装(若没Homeb…

VL817S与之前其他型号的区别与改动

相对于VL817C0以及VL817B0来说,VL817S使用外部供电不需要接入5V,HUB 5V 请参考参考设计接地。内部3.3 LDO输出请悬空。1。2V LX和FB请悬空。如下所示,详见参考设计。 1、3.3V和1.2V之间的时序要求是怎么样的? 下图是VL817(S) 上电…

无线技术有哪些专业术语,看完本文=半个无线专家

无线技术是指通过无线电波或光波等无线传输媒介,实现信息、数据或信号的传递和通信的技术领域。在无线技术领域中,有许多专业术语用于描述和标识不同的技术和概念。 以下是常见的无线技术专业术语的简介: Wi-Fi(无线局域网&#…

磁盘这列(Raid)

RAID介绍 RAID技术通过把多个硬盘设备组合成一个容量更大的、安全性更好的磁盘阵列。把数据切割成许多区段后分别放在不同的物理磁盘上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理设备上,从而…