7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位!

news2025/4/22 19:08:18

随着IT行业的发展,产品愈渐复杂,web端业务及流程更加繁琐,目前UI测试仅是针对单一页面,操作量大。为了满足多页面功能及流程的需求及节省工时,设计了这款UI 自动化测试程序。旨在提供接口,集成到蜗牛自动化测试框架,方便用例的设计。

目前,在自动化测试的实际应用中,接口自动化测试被广泛使用,但UI自动化测试也并不会被替代。让我们看看二者的对比:

  • 接口自动化测试是跳过前端界面直接对服务端的测试,执行效率和覆盖率更高,维护成本更低,整体而言投出产出比更高,因此在项目上的使用更广泛。
  • 而UI自动化测试则是模拟用户在前端页面中的操作行为进行测试,虽然在执行过程中易收到其他因素的影响(如电脑卡顿,浏览器卡顿,网速等)而导致用例执行失败,且后期维护成本较高,但是UI自动化测试更贴近用户使用时的真实情况,也能够发现一些接口自动化无法发现的bug。

因此,在实际项目的自动化测试中,通常采用以接口自动化为主、系统稳定后通过UI自动化对重点业务流程进行覆盖的方案。而UI自动化的基础,就是元素定位。只有完成了元素定位,才可以操作定位到的元素,模拟手工测试进行一系列的页面交互,比如点击、输入等。

一、常用的元素定位方式

对于web端的UI自动化测试,元素定位通常使用selenium提供的以下8种定位方式:

  1. id:根据id定位,是最常用的定位方式,因为id具有唯一性,定位准确快捷。
  2. name:通过元素的【name】属性定位,会存在不唯一的情况。
  3. class_name:通过class 属性名称进行定位。
  4. tag_name:通过标签名定位,一般不建议使用。
  5. link_text:专用于定位超链接元素(即a标签),需要完全匹配超链接的内容。
  6. partial_link_text:同样用于定位超链接元素,但可以模糊匹配超链接的内容。
  7. xpath:根据元素路径进行定位,分为绝对路径和相对路径,可以定位到所有目标元素。
  8. css_selector:selenium官方推荐的元素定位方式,比xpath效率更高,但需要掌握一些css基础。

在实际的项目中,更推荐使用xpath和css定位方式,这两种可以定位到页面中的所有元素,使用限制较小。如果对css没有了解的话,推荐使用xpath的方式,上手更快;如果对css有一定基础的朋友,更推荐使用css进行元素定位。

接下来,以百度首页为例,在实际使用中对各种定位方式进行详细介绍。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

二、元素定位的实际应用

以百度首页的搜索框为例,介绍id、name、class、tag_name四种元素定位方式。

1.id定位

通过id属性对百度首页的的输入框进行定位。

# 通过input标签的id属性进行定位 find_element_by_id('su')

2.name定位

通过name属性对百度首页的输入框进行定位。

# 通过input标签的name属性进行定位 find_element_by_name('wd')

3.class_name定位

通过class属性对百度首页的输入框进行定位。

# 通过input标签的class属性进行定位 ind_element_by_class_name('s_ipt')

4.tag_name定位

通过标签名称来定位,这种方式很少会使用,因为页面中的同一个标签通常都会重复。

# 通过input标签名进行定位 find_element_by_tag_name('input')

接下来,以页面底部的“意见反馈”为例,介绍linkText和partialLinkText两种定位方式。

5.linkText定位

通过a标签的文本信息进行定位,仅用于定位超链接a标签。

# 通过a标签的文本信息进行定位 find_element_by_link_text('意见反馈')

6.partialLinkText定位

​通过对a标签的部分文本信息模糊匹配进行定位。

# 通过对a标签的部分文本信息模糊匹配进行定位 find_element_by_partial_link_text('反馈')

7.xpath定位

xpath定位方式是通过页面元素的属性和路径进行元素定位,理论上可以对页面中所有的元素精选定位。下面介绍xpath的几种定位方式。

首先,介绍一下xpath的路径节点表达式,如图:

(1) xpath绝对路径定位

仍已百度首页的搜索框为例进行介绍。

find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input')

通常情况下,不会选择使用xpath绝对路径进行元素定位,原因有二:一是绝对路径繁琐冗长,影响运行速度;二是涉及的层级较多,任何一个层级发生变化都会导致定位失败,需要重新进行修改,不利于后期维护。

(2) xpath相对路径和元素属性结合定位

若目标元素的某个属性具有唯一性,则可直接对目标元素进行定位;否则,需要在目标元素附近寻找一个具有唯一性的元素,然后通过二者的层级关系进行定位。

接下来,依然以百度首页的页面元素为例,对xpath定位的方式举例说明。

# 通过元素属性定位百度首页的搜索框
find_element_by_xpath("//input[@id='su']")
find_element_by_xpath("//input[@name='wd']")
find_element_by_xpath("//input[@class='s_ipt']")
find_element_by_xpath("//input[@autocomplete='off']")

# 通过文本信息定位(和text_link方法不同,不局限于a标签)
find_element_by_xpath("//a[text()='意见反馈']")
find_element_by_xpath("//span[text()='设置']")

# 通过父级定位子级元素,举例百度首页搜索按钮
find_element_by_xpath("//span[@class='bg s_btn_wr']/input")

# 通过子级定位父级元素,举例百度首页百度热榜的换一换
find_element_by_xpath("//span[text()='换一换']/..")

# 通过contains方法模糊匹配定位,举例百度首页搜索按钮
find_element_by_xpath("//input[contains(@class,'s_btn')]")
find_element_by_xpath("//a[contains(text(),'反馈')]")

(3) 浏览器复制xpath

除了上述两个方法之外,还有一个简单的方法,就是在浏览器的F12开发者工具中找到目标元素,鼠标右键进行复制即可,如下图。

但复制的xpath路径可能会很冗长,还是推荐大家根据需求自己写目标元素的xpath路径。

8.css_selector定位

(1) css定位简介

css_selector定位(下文简称css定位),它的定位方式,利用选择器进行的。在CSS 中,选择器是一种模式,用于选择需要添加样式的对象。通过css进行元素定位,理论上也是可以定位到页面中的所有元素的。

和xpath相比,css的语法更简洁、定位速度更快,但是css的语法比xpath较为复杂一些,相对难记。

(2) css定位实例

下面,仍以百度首页搜索框为例,对css定位方式举例说明。

# 通过id定位,id名前加# 
find_element_by_css_selector("#kw")

# 通过class定位,class名前加. 
find_element_by_css_selector(".s_ipt")

# 通过标签定位
find_element_by_css_selector("input")

# 通过其它属性定位 
find_element_by_css_selector("[name='wd']")

# 标签和属性组合定位 
find_element_by_css_selector("input#kw")
find_element_by_css_selector("input.s_ipt")
find_element_by_css_selector("input[name='wd']")
find_element_by_css_selector("[name='wd'][autocomplete='off']")

# 通过父级定位子级元素 
find_element_by_css_selector("from#form>span[@class='bg s_ipt_wr']>input")

三、小结

以上,就是selenium的各种元素定位方法的简单介绍。项目的实际使用中,在定位方法的选择上,比较推荐大家采用“id > name > xpath/css > 其它”的顺序进行选择。

虽然UI自动化测试没有接口自动化测试使用广泛,但也是自动化测试中不可获取的一部分,希望本文能对学习UI自动化的小伙伴产生一定的帮助。

今天的分享就到此结束了, 如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦....

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

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

相关文章

BUUCTF 文件中的秘密 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 小明经常喜欢在文件中藏一些秘密。时间久了便忘记了,你能帮小明找到该文件中的秘密吗? 密文: 下载附件,解压得到JPEG图片。 解题思路: 1、根据题目提示…

预训练+微调 逆合成预测

【JCIM 2020】数据增强预训练基于模板 Template methods Figure 1. 预训练微调 workflow 首先,通过增强的反应数据(真实存在的数据计算机生成的反应数据)进行Pretrain Encoder A, 2、只使用真实反应数据对Pretrain Encoder A 进…

最小生成树专题1 最小生成树-Prim算法

题目: 样例1: 输入 4 5 0 1 3 0 2 2 0 3 3 2 3 1 1 2 1 输出 4 样例2: 输入 3 1 0 1 1 输出 -1 思路: Prim 算法和 朴素版的 Dijkstra 有点类似,也叫做 朴素版Prim算法,但也还是有点区别。 Dijkstra 中…

​CRM系统如何选型?

不少企业都想要使用CRM客户管理系统,但往往在CRM选型阶段就被折腾的五迷三道。CRM系统选型难在哪里?下面我们从企业用户和CRM厂商两方面进行分析,来说说关于CRM系统选型的那些事。 企业自身原因: 1、认知偏差 看到一个观点&…

GNN图神经网络入门

1.为什么会提出图神经网络? 答:为了处理图Graph这种特殊的数据结构。 2.为什么要与神经网络搭上关系? 答:利用神经网络能够拟合任意函数的能力(或者理解为强大的为特征变换能力)。 3.图神经网络的最终目的是…

Ajax、Json深入浅出,及原生Ajax及简化版Ajax

Ajax 1.路径介绍 1.1 JavaWeb中的路径 在JavaWeb中,路径分为相对路径和绝对路径两种: 相对路径: ./ 表示当前目录(可省略) ../ 表示当前文件所在目录的上一级目录 绝对路径: http://ip:port/工程名/资源路径 2.2 在JavaWeb中…

EG网关串口连接台达PLC

EG网关串口连接台达PLC 前言:台达PLC是一款国产优秀的可编程控制器,广泛应于工业控制领域,是一款性能高,运行稳定的控制器。此次我们要把台达DVP-ES系列PLC通过modbus驱动连接到EMCP物联网云平台(简称EMCP)…

一些额外且好用的 icon 图库

一些额外且好用的 icon 图库 之前偶然逛到 最佳 Icon 图标库推荐,收藏等于学会,这个真的挺好用的,不过这里的 icon 都是和 React 组件绑定了,额外补充一些不和框架绑定的图库 font awesome 这个应该用的人满多的,算…

基于springboot实现时间管理系统项目【项目源码+论文说明】

基于springboot实现时间管理系统演示 摘要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括时间管理系统的网络应用,在外国时间管理系统已经是很普遍的方式,不过国内的管理系统可能还处于起步阶段。时…

KNN 和 SVM 图片分类 任务 代码及细节分享

使用KNN (K-最近邻) 方法进行图像分类也是一个常见的选择。以下是 使用sklearn的KNeighborsClassifier进行图像分类的Python脚本: import os import cv2 import numpy as np import logging from sklearn.neighbors import KNeighborsClassifier from sklearn.met…

jdbc 中 Statement 不能避免注入式漏洞(SQL注入漏洞)

注入式漏洞 也称为 SQL注入漏洞,是一种常见的应用程序安全漏洞。当应用程序将用户输入的数据直接 拼接 到SQL查询语句中,而未对输入进行有效的过滤和转义时,攻击者可通过构造恶意的输入来执行非法的SQL语句,从而实现对应用程序的攻…

esp32c3-microPython开发固件烧录用户手册

esp32c3-microPython开发固件烧录用户手册1.4 文章目录 esp32c3-microPython开发固件烧录用户手册1.4烧录所需硬件软件工具Thonnyflash_download_tools 插座与USB转TTL模块之间接线esp32-C3版本插座(底板4针) 下载对应的 MicroPython固件烧录MicroPython…

grafana InfluxDB returned error: error reading influxDB 400错误解决

问题: 如图提示错误解决 确认自己的docker容器是否配置了以下3个字段 DOCKER_INFLUXDB_INIT_USERNAMExxx DOCKER_INFLUXDB_INIT_PASSWORDyyy DOCKER_INFLUXDB_INIT_ADMIN_TOKENzzz 如果有,在grafana中需要添加header配置Header: Authorization , Value…

将自己本地项目上传到git,IDEA图文操作

文章目录 一、初始化git仓库二、gitee创建仓库三、输入自己仓库的地址四、在添加所修改的文件可能的错误 五、合并需上传文件六、上传参考文档 一、初始化git仓库 在自己的项目中,命令行中输入 git init二、gitee创建仓库 新建仓库 设置仓库参数,设置…

C语言的const函数修饰指针

文章目录 一、const函数的作用 int a 10; int *p ; p &a;从上面的代码分析,p 存放的就是a的地址, *p 存放的就是 a 的值。 一、const函数的作用 一旦使用了const函数修饰一个变量,那么这个变量就无法变化了。 所以下面三种情况&#…

分享一下在微信小程序里怎么添加会员充值功能

在微信小程序中添加会员充值功能,可以提升用户的消费体验,增加商家的销售收入。下面是一篇关于如何在微信小程序中添加会员充值功能的软文。 标题:微信小程序实现会员充值功能,提升用户忠诚度与销售收入 随着移动支付的普及&…

JavaSE 二叉树

目录 1 树型结构1.1 概念1.2 树的表示形式1.3 树的应用 2 二叉树2.1 概念2.2 二叉树的基本形态2.3 两种特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储2.6 二叉树的基本操作2.6.1 二叉树的遍历2.6.2 二叉树的基本操作 2.7 基础练习题2.7.1 二叉树的前序遍历2.7.2 二叉树中序遍历…

怎么防止U盘复制电脑文件

怎么防止U盘复制电脑文件 安企神U盘管理系统下载使用 说到防止U盘复制电脑文件也是一个老生常谈的话题了,因为U盘的主要目的是在不同设备之间传输文件。对于企业来说,有的重要信息是不能对外泄露的,出于安全考虑,企业往往是禁止…

SpringDoc上传附件或文件 - Swagger3

摘要 从Swagger2 升级到 Swagger3 之后发现对于附件出现了问题。 依赖 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.7.0</version></dependency>问题描述 在Sw…

Leetcode—80.删除有序数组中的重复项II【中等】

2023每日刷题&#xff08;十&#xff09; Leetcode—80.删除有序数组中的重复项II 双指针实现代码 int removeDuplicates(int* nums, int numsSize){int i 0;int j 1;int k 1;int tmp nums[i];while(j < numsSize) {if(nums[j] tmp && k < 2) {nums[i] n…