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。

原文作者:zhangyj
点击查看原文

相关文章
|
6月前
|
移动开发 前端开发 JavaScript
H5 页面与 Web 页面的制作方法
H5页面制作利用HTML5、CSS3和JavaScript技术,结合H5编辑器或框架(如Adobe Dreamweaver、Ionic),注重移动设备兼容性与响应式布局。Web页面制作则基于传统HTML、CSS和JavaScript,借助文本编辑器或IDE完成开发。两者区别在于技术版本、交互性和浏览器支持:H5更互动、现代,但可能不兼容旧浏览器;Web页面更静态、兼容性广。根据需求选择:高交互选H5,广泛兼容选Web。
811 6
|
9月前
|
人工智能 自然语言处理 API
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
UI-TARS 是字节跳动推出的新一代原生图形用户界面(GUI)代理模型,支持跨平台自动化交互,具备强大的感知、推理、行动和记忆能力,能够通过自然语言指令完成复杂任务。
2331 16
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
|
8月前
|
存储 JSON JavaScript
WEB CAD插件通过上下文对象MxPluginContext修改UI界面的方法
本文介绍了如何使用MxPluginContext动态控制MxCAD项目的UI界面。通过该上下文对象,开发者可以灵活设置UI配置,如控制操作栏显隐、编辑按钮、添加侧边栏等。具体方法包括调用`getUiConfig()`获取并修改`mxUiConfig.json`中的属性,实现界面的定制化。此外,还提供了控制命令行聚焦的功能,解决输入框焦点锁定问题。详细代码示例和效果对比图展示了具体实现步骤,帮助开发者更好地适配项目需求。
|
10月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
284 31
Selenium IDE:Web自动化测试的得力助手
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
CogAgent-9B 是智谱AI基于 GLM-4V-9B 训练的专用Agent任务模型,支持高分辨率图像处理和双语交互,能够预测并执行GUI操作,广泛应用于自动化任务。
317 12
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
|
9月前
|
人工智能 编解码 自然语言处理
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
AGUVIS 是香港大学与 Salesforce 联合推出的纯视觉 GUI 自动化框架,能够在多种平台上实现自主 GUI 交互,结合显式规划和推理,提升复杂数字环境中的导航和交互能力。
352 8
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
|
10月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
577 17
Selenium:强大的 Web 自动化测试工具
|
11月前
|
SQL 存储 安全
Web 常见攻击方式及防御方法
【10月更文挑战第25天】Web 安全是一个复杂而重要的领域,攻击者不断寻找新的攻击方法,我们需要不断加强防御措施,提高安全意识,以保障 Web 应用的安全运行。通过采取多种防御手段的综合运用,我们可以有效地降低 Web 攻击的风险,保护用户的信息和财产安全。同时,随着技术的不断发展,我们也需要持续关注和研究新的安全威胁和防御方法,以应对不断变化的安全形势。
1251 56
|
9月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
447 9
|
8月前
|
机器学习/深度学习 算法 文件存储
神经架构搜索:自动化设计神经网络的方法
在人工智能(AI)和深度学习(Deep Learning)快速发展的背景下,神经网络架构的设计已成为一个日益复杂而关键的任务。传统上,研究人员和工程师需要通过经验和反复试验来手动设计神经网络,耗费大量时间和计算资源。随着模型规模的不断扩大,这种方法显得愈加低效和不够灵活。为了解决这一挑战,神经架构搜索(Neural Architecture Search,NAS)应运而生,成为自动化设计神经网络的重要工具。