Web GUI自动化-常用xpth定位方法分享

简介: 本文介绍 Web GUI自动化-常用xpth定位方法分享

元素定位是Web GUI自动化测试的核心问题之一,也是最难的问题之一,难点主要在于如何能稳定描述元素路径,本文主要总结下常用的xpath定位方法和我的一些经验。

​元素定位大致可以分两类,绝对路径定位和相对路径定位,前者即使走投无路也不推荐使用,因为绝对路径经常会发生变化,后者比较常用的。但是相对路径定位方式有很多,需要选一种最有利于脚本兼容性的方式。

1.绝对路径定位

​逐层输出元素的位置,如:

//*[@id="app"]/div/div[2]/section/div/div/div[1]/div/div/button/span

​绝对路径可直接从浏览器调试窗口获取,但此方式最不可取的,代码结构稍做调整就会不适用,因此即使找不到定位的方式,也不建议使用。​

2.相对路径定位

​相对路径定位,需要找到确定元素唯一性的特征,定位元素位置。在此分享10种方法,可依次尝试定位。

2.1 id属性定位

​最理想的方式,就是使用id属性定位,id一般在当前界面具有唯一性。

image.png
​图 2-1

​图2-1中代码id在当前界面唯一,因此我们最优先选择的定位方式是使用id,只需寻找id=“table-1”的元素即可,因此xpath代码可写为:

//div[@id="tab-1"]
//*[@id="tab-1"]

​//表示相对路径,@后跟属性,*表示任何匹配任何节点

2.2 name属性定位

当name属性唯一时,也可用来定位。

image.png
图 2-2

如图2-2中name也具有唯一性,也可以通过name来定位元素的位置:

//input[@name="wd"]

2.3 class属性定位

适用于class属性在当前界面具有唯一性的场景。
image.png
图 2-3

​class属性是比较常用的定位元素方式,图2-3中class具有唯一性,xpath定位如下:

//span[@class="el-pagination__total"]

2.4 标签名定位

​有时元素自身标签也可实现定位,常见如button、input、textarea等。

image.png
图 2-4

​如图2-4当前界面只有一个标签textarea,此时元素可以通过标签名定位。

//div/textarea

2.5 其他属性定位

​当以上属性都无法精准定位时,可以考虑placeholder、type、for属性定位,但方式不一定最优。
image.png
图 2-5

如图2-5,定位某个标签的位置,for属性具体唯一性,但是class不唯一,此时就可以用for属性定位元素。

//label[@for="name"]

image.png
图 2-6

如图2-6定位上传文件的位置,type可以精准定位到元素,路径可以写成:

//input[@type="file"]

image.png
图2-7

​placeholder也可以定位,但是不一定最优,若信息稍有变化就不适用,图2-7可使用placeholder定位。

//input[@placeholder="如1.0.1"]

​此外还有href、title、value等不常用的属性,此处就不一一详细说明了,总之只要具有唯一性的属性都可以用来定位元素,但是需要衡量是否是最优方式。但是注意有些属性值是动态生成的,此类属性不可用于定位。

2.6 使用逻辑运算定位

​当单一属性无法满足精准定位的需求时,xpath支持逻辑运算支持与(and)、或(or),这个功能还是比较强大的,最常用的是and,即多个属性确定结合定位元素。

image.png
图 2-8

​如登陆界面有好几处入口,单一属性都无法精准定位,此时可以herf和class属性结合,实现定位需求,此功能在脚本中比较常用。

//*[@href="#/login" and @class="router-link-active"]

2.7 通过上级节点定位

​当现实没那么理想,元素找不到任何可精准定位的属性时,可以先定位父级的位置,再进行元素定位。

image.png
图 2-9

​图2-9中,父级元素class属性唯一,因此先定位到父级,再实现自身定位。图中父级有3个class类,可选取一种用于定位,也可使用多个class类同时定位。

//div[@class="product-name"]/input
//div[@class="productCopy product-name"]/input

​或者通过先定位祖辈(更上层的元素),实现元素定位。

image.png
图 2-10

​图2-10是定位的一个提交按键位置,元素以及父级属性都很大众,此时可以寻找更上级的元素属性,先定位祖辈位置,再结合元素自身class,唯一确认元素位置。

//div[@class="el-dialog__wrapper delete-dialog"]//button[@class="el-button el-button--primary"]

2.8 通过子节点定位

​既然可以通过上层节点定位到子节点,那么也可以通过子节点实现父节点定位,parent就是比较常用的方式。

image.png
图 2-11

​图2-11中,子节点class属性当前界面唯一,因此可以先定位到i节点,再找寻它的父节点 。此时有两种方法可以选择,“parent::节点名称”或直接..到上一层级节点,具体表达如下:

//i[@class="icon-plus el-icon"]/parent::span
//i[@class="icon-plus el-icon"]/..

2.9 通过相邻目录定位

​当无法通过层级关系定位元素时,观察元素的兄弟姐妹们(相邻层级的元素)或者家族长辈(上级的相邻层级元素)的特征,实现元素定位。

image.png
图 2-12

​图2-12相邻元素很相似,此时可以通过标签下标定位,当然方式也不一定最优,与其他代码不同,下标从1开始,如定位第一个元素“账号信息”位置:

//ul/li[1]

​另一种场景是先找寻上层元素的相邻元素,结合自身元素属性,实现定位。

image.png
图2-13

​图2-13中,元素自身和相邻元素,甚至上级元素都没有无法精准定位,但是再上层label节点可以精准定位,此时通过与label节点结合,再结合自身input,就可以唯一找到元素位置。

//label[@for="name"]/..//input

​..表示上一层级节点

2.10 contain/text方法定位

​若是以上方法都不能满足你的需求,有一个非常强大的功能就可以使用,模糊匹配关键字。有多种模糊匹配方式,如:匹配开头,中间、结尾字段等,使用比较多的是contains(包含),很多场景可以通过模糊匹配定位。

image.png
图2-14

图2-14中元素class属性,以及上级button属性都无法精准定位,此时可以通过匹配文本进行定位。

//span[contains(text(),'绑定设备')]

3.总结

元素定位思路与形容某个人很相似:

  1. 元素单一属性定位:介绍个人特点,如:他有羽毛扇。
  2. 元素多属性组合:单个属性不唯一,多个属性组合可唯一确定,如:他谋略超群,且生性多疑。
  3. 通过上级节点定位:长辈有独特特征,或者与长辈组合可以确定唯一性,如:他是中山靖王之后,汉景帝玄孙。
  4. 通过子节点定位:子孙中有特殊人物,如:生子当如孙仲谋
  5. 通过相邻元素定位:找寻家族有特征人物,如:他是刘备的结义兄弟,且有文化。
  6. 模糊匹配:匹配元素的文本内容,如:他的名字里有个“龙”字。
  7. 当以上都无法满足定位条件时,给亲的建议是,找亲爱的开发同学,给所需要定位的元素补充上id。

文章来源:芯片开放社区
文章链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=658631906446802944

相关文章
|
5天前
|
前端开发 JavaScript 持续交付
Web应用开发的方法
Web应用开发的方法
7 1
|
9天前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
21 4
|
7天前
|
监控 测试技术 持续交付
Web2py 项目部署也太让人头疼了吧!但掌握这些,你就能轻松搞定自动化部署!
【8月更文挑战第31天】在现代软件开发中,高效的项目部署至关重要。针对 Web2py 框架,自动化部署不仅提升开发效率,还减少了人为错误。首先需设置版本控制、服务器环境及配置管理;其次利用 CI/CD 工具(如 Jenkins)实现自动构建、测试与部署;再者采用 Docker 容器化技术确保跨环境一致性;最后部署监控与日志记录工具保障系统稳定性。通过这些步骤,可显著优化 Web2py 项目的部署流程。例如,使用 Fabric 可简化部署脚本编写,实现服务器代码更新、依赖安装及服务重启等操作自动化。
15 1
|
8天前
|
Web App开发 测试技术 API
自动化测试之美:使用Selenium和Python进行Web应用测试
【8月更文挑战第31天】在软件开发的快节奏世界中,自动化测试如同一束明灯,照亮了质量保证之路。本文将引导你通过Selenium和Python的强大组合,探索如何构建高效的Web应用测试框架。我们不仅会讨论理论,还会深入代码,从一个简单的示例开始,逐步扩展至更复杂的场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。让我们一同揭开自动化测试的神秘面纱,体验它的魅力所在。
|
14天前
|
人工智能 Java 测试技术
自动化测试之美:如何用Selenium提升Web应用的质量保证
【8月更文挑战第24天】 在软件开发的海洋里,自动化测试如同一艘救生艇,帮助开发团队保持代码质量的同时,还能确保他们不会淹没在功能的迭代和bug修复中。Selenium,作为一个用于Web应用程序测试的工具,它的强大之处在于模拟真实用户操作的能力。本文将通过浅显易懂的语言和实际代码示例,引导读者理解Selenium的魅力所在,以及如何有效利用它来提升Web应用的测试效率和覆盖率。
|
15天前
|
JavaScript 前端开发 开发者
JS 继承之谜:究竟有哪些神秘方法?Web 前端开发者必知的关键技巧待你揭开谜底!
【8月更文挑战第23天】JavaScript (JS) 是 Web 前端开发的关键语言,其中继承是面向对象编程的重要概念。本文探讨了 JS 中几种继承机制:原型链继承、构造函数继承及组合继承。原型链继承利用原型对象实现属性和方法的共享;构造函数继承通过在子类构造器内调用父类构造器实现私有属性的复制;组合继承结合两者优点,既支持属性共享又避免了属性被意外覆盖的风险。理解这些模式有助于开发者更高效地组织代码结构,提升程序质量。
27 1
|
20天前
|
人工智能 自然语言处理 搜索推荐
彻底摒弃人工标注,AutoAlign方法基于大模型让知识图谱对齐全自动化
【8月更文挑战第18天】知识图谱作为结构化语义库,在AI领域应用广泛,但构建中实体对齐难题一直存在。近期,AutoAlign提供了一种全自动对齐方案,由张锐等人研发并发布于arXiv。此方法摒弃传统的人工标注依赖,利用大型语言模型实现全自动化对齐。AutoAlign包括谓词与实体对齐两部分,通过构建谓词邻近图及计算实体嵌入,有效提升对齐性能。实验显示其性能超越现有方法,尤其适用于大规模数据集。尽管如此,AutoAlign仍面临计算资源消耗及不同领域适应性等挑战,未来需进一步优化以增强鲁棒性和泛化能力。
26 7
|
16天前
|
XML JavaScript 测试技术
Web自动化测试框架(基础篇)--HTML页面元素和DOM对象
本文为Web自动化测试入门指南,介绍了HTML页面元素和DOM对象的基础知识,以及如何使用Python中的Selenium WebDriver进行元素定位、操作和等待机制,旨在帮助初学者理解Web自动化测试中的关键概念和操作技巧。
33 1
|
7天前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
31 0
|
15天前
|
存储 前端开发 开发者
Web 前端热点来袭!数组去重难题何解?快来探索这些超实用方法,引发开发者共鸣!
【8月更文挑战第23天】在Web前端开发中,去除数组中的重复项是提升数据准确性和效率的关键步骤。本文介绍了四种常用的数组去重方法:一是运用ES6的Set数据结构,通过构造Set对象并转换回数组,快速剔除重复值;二是结合for循环与`indexOf`方法,逐个检查元素是否已存在于新数组中;三是采用`forEach`循环与`includes`方法实现类似功能;四是利用`reduce`方法,以函数式编程方式完成累积检查和去重。这四种方法各有优势,可根据项目需求和环境选择使用。
36 0
下一篇
DDNS