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

2023-11-01

随着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自动化的小伙伴产生一定的帮助。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位 的相关文章

随机推荐

  • 时序预测

    时序预测 MATLAB实现DBN SVM深度置信网络结合支持向量机时间序列预测 多指标评价 目录 时序预测 MATLAB实现DBN SVM深度置信网络结合支持向量机时间序列预测 多指标评价 效果一览 基本描述 程序设计 参考资料 效果一览
  • 语义分割、实例分割

    在cv领域 会经常见到 语义分割 实例分割 这两个名词 本文就来解释下他们分别是什么意思 又有什么区别 以下的图部分借用自知乎用户william的文章 一文读懂语义分割与实例分割 知乎 目录 语义分割和实例分割 语义分割 实例分割 总结 语
  • 勒索病毒最新变种.halo勒索病毒来袭,如何恢复受感染的数据?

    摘要 halo勒索病毒已成为数字世界中的威胁 通过高级加密技术将文件锁定 并要求支付赎金 本文91数据恢复将深入介绍 halo勒索病毒的工作原理 提供解锁被感染文件的方法 以及探讨如何有效预防这一威胁 如果您正在经历勒索病毒数据恢复的困境
  • android CoordinatorLayout使用

    http blog csdn net xyz lmn article details 48055919 一 CoordinatorLayout有什么作用 CoordinatorLayout作为 super powered FrameLayo
  • vue-quill-editor富文本编辑器的使用(实现图片/文件上传)

    目录 实现效果 编辑器配置 基本配置 实现图片上传 实现文件上传 实现效果 文本编辑的三个功能分别是 添加链接 上传图片 上传文件 编辑器配置 基本配置
  • 关于webview点击输入框无法弹出软键盘问题

    转载请注明出处 http blog csdn net ym4189 article details 78017484 webview加载一个网页版聊天时 由于输入框还要加载表情 没有使用 lt input gt 标签 使用的 lt pre
  • windows中怎么添加定时任务

    linux中有crontab定时任务 很方便 其实windows也有类似的 需求 定时执行python脚本 1 Windows键 R 调出此窗口 输入compmgmt msc 2 转载于 https www cnblogs com gcgc
  • Spring 基础知识

    Spring Framework Spring框架是一个开放源代码的J2EE应用程序框架 由Rod Johnson发起 是针对bean的生命周期进行管理的轻量级容器 lightweight container Spring解决了开发者在J2
  • Ant Design Pro基础框架搭建

    介绍 Ant Design Pro 是基于 Ant Design 和 umi 的封装的一整套企业级中后台前端 设计解决方案 致力于在设计规范和基础组件 在学习Ant Design Pro之前 要求我们有一定的umi和Ant Design基础
  • Uart-WiFi模块ESP8266把玩记

    Uart WiFi模块ESP8266把玩记 由于只是一个模块 并不是完整的开发板 所以需要自己连接外围电路 试用的过程中遇到了很多麻烦 这里统统记录 1 确认硬件版本 由于ESP8266版本一直在更新 所以需要自己确认一下PCB版本 特征
  • Nacos介绍与安装启动

    什么是 Nacos 概览 欢迎来到 Nacos 的世界 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务发现 服务配置 服务元数据及流量管理 Nacos 帮助您更敏捷和容易地构建
  • roadmap & go语言

    技术类的Roadmap 路线图 具有许多好处 下面是其中几个主要的好处 明确目标 Roadmap可以帮助技术团队明确目标和愿景 它提供了一个清晰的计划 使团队成员知道他们正在朝着什么方向前进 并且可以更好地集中精力和资源 规划优先级 Roa
  • 情态动词的用法

    文章目录 1 can could 2 may might 3 must have to 4 should ought to 5 need 5 1 情态动词 5 2 实意动词 5 3 don t have to 6 had better 7
  • [私有云平台的搭建——vCenter 及其安装与配置】

    目录 1 vCenter 部署结构 2 vCenter 功能 3 vCenter 高级功能 4 环境说明 5 选择要安装的程序 6 同意许可协议 7 选择部署类型 嵌入式部署 8 设置系统名称 9 建议使用 FQDN 10 设置 SSO 域
  • java.lang.NoSuchMethodException异常处理方法

    java lang NoSuchMethodException意思是没有找到该方法 第一种情况 根据提示查看方法是否存在 第二种 是访问的方法是受保护的 我们用getDeclaredMethod 来获取方法 getDeclaredMetho
  • Java如何避免死锁

    目录 一 死锁的定义 二 死锁的原因 1 造成死锁的原因 2 避免死锁 一 死锁的定义 死锁的定义 死锁是指两个或者两个以上的进程在执行的过程中 由于竞争资源而造成的一种阻塞现象 如果没有外力作用 它们都将无法推进下去 此时称系统处于死锁状
  • 学习Linux的第四天

    vim vi 文本编辑器 重点 1 vim lt 名字 gt 2 命令模式 d enter 删除光标所在行以及下一行 dd 删除光标所在行 4dd 从光标所在行开始一共删除4行 dG 删除光标所在行 以及到文档尾 dgg 删除光标所在行 以
  • 【杂七杂八】CUDA一个小错误:segmention fault

    找了半天 原来是忘了cudaFree
  • AXI Narrow Transfer、Unaligned Transfer

    本文为转载内容 原文链接 深入 AXI4 总线 三 传输事务结构 知乎 读写数据结构 在 AXI 数据传输过程中 主要涉及到窄位宽数据传输 Narrow Transfer 非对齐传输 Unaligned Transfer 以及混合大小端传输
  • 7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位

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