浅谈UI自动化
⭐️前言⭐️
本篇文章围绕UI自动化来展开,主要内容包括什么是UI自动化,常用的UI自动化框架,UI自动化原理等。
🍉欢迎点赞 👍 收藏 ⭐留言评论
🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言
🍉博客中涉及源码及博主日常练习代码均已上传GitHub
📍内容导读📍
- 🍅 什么是UI自动化
- 🍅 UI自动化的工作原理
- 🍅 UI自动化的收益
- 🍅 常见UI自动化框架及适用场景
- 🍅 selenium框架
- 1、为什么选择selenium(优点)
- 2、selenium缺点
- 3、selenium自动化测试的原理
- 4、selenium的三种等待方式
- 5、selenium的八大定位方式
- 6、selenium文本框输入内容
🍅 什么是UI自动化
UI自动化测试是一种软件测试方法,用于验证用户界面的行为是否符合预期。它涉及编写自动化脚本,模拟用户在应用程序中的行为,例如点击按钮、输入文本、选择选项等,以检查应用程序是否按照预期运行。UI自动化测试可以提高测试的效率和准确性,并且可以在应用程序发生更改时快速检测潜在的问题。
UI自动化,落地到业务场景上,比如类似于企业微信这样的客户端应用,在业务日常变更、日常拨测和版本发布方面需要自动化支持,减少人力,提升效率
日常变更:
比如说企业微信的频繁更新和小功能迭代,变更后手动触发流水线模块,快速验证系统的基本功能,减少手工测试成本。
日常拨测:
流水线每天凌晨两点定时触发自动化用例,日常例行执行,及时发现潜在的功能缺陷。
版本发布:
在版本发布前。手动触发流水线做快速验证,并为回归测试深层次的操作路径做兜底
🍅 UI自动化的工作原理
其实就是落地到具体的脚本实现原理,大概有以下几个步骤:
元素定位——》模拟操作——》执行操作——》结果验证——》日志和报告
1、元素定位:
- UI自动化首先需要找到页面上的目标元素(如按钮、文本框、链接等),这些元素通常通过唯一的属性来定位
- 元素定位的方法包括使用元素的ID、类名、标签名、XPath、CSS选择器等
2、模拟用户操作:
- 自动化脚本可以模拟用户在界面上的各种操作,如点击按钮、输入文本、选择下拉框、拖拽元素等
- 通过自动化工具发送这些操作命令给系统,模拟真实用户的行为
常见的用户操作包括:
- 点击:如单击、双击、右键点击等
- 键盘输入:模拟输入文本或按下快捷键
- 鼠标操作:如移动、悬停、拖放等
3、执行操作:
- 将多个操作组合成脚本,脚本执行自动化后,应用会响应这些操作,例如页面跳转、显示弹窗或改变UI状态
- 自动化工具会等待页面完成加载或指定元素的状态发生变化(如元素可见、可点击等),再继续执行下一步操作
等待机制可以通过显示等待、隐式等待、线程休眠等方式,以确保页面元素处于可操作状态
4、结果验证:
-
自动化测试不仅要执行操作,还需要验证操作结果是否符合预期
-
常见的验证方式包括:
- 检查元素的文本值或属性:验证显示的文本内容是否正确
- 检查元素的状态:如元素是否可见、是否被选中、是否被禁用等
- 页面跳转:检查当前页面是否加载成功
-
如果实际结果与预期结果不符,自动化测试会记录失败信息并生成报告
5、日志和报告
- 自动化测试工具会记录测试过程中的操作步骤和异常信息,生成详细的测试报告,包括成功和失败的测试用例、截图、错误日志等。
- 这些日志和报告可以用于分析测试的执行情况,帮助快速定位问题。
6、集成和执行
- 自动化脚本集成到CI/CD流水线中,支持自动化回归测试,确保每次代码变更不会破坏已有功能
- 测试脚本可以定时执行或手动触发,实现高效的自动化测试流程
🍅 UI自动化的收益
1、时间成本节约
-
在日常变更和版本发布时,可以通过用例的一键执行,节省大量回归人力
并且深层次操作路径自动化兜底,在版本发布前,通过自动化用例的一键执行,可以为一些人不去覆盖到的操作路径去做兜底
2、支持产品快速迭代
- 功能覆盖率达60~80%左右,稳定率95%以上,意味着大部分自动化测试执行是可靠的,能够快速反馈产品的质量状态
- 类似于企业微信客户端这样的应用,频繁版本迭代,有助于缩短测试周期,支持更快速出包产品发布
3、提高缺陷检测率
- 日常拨测,累计发现功能缺陷
- 专项测试,增加不同条件下的测试场景覆盖,比如弱网专项,提高产品在多个角度的测试覆盖率
🍅 常见UI自动化框架及适用场景
Selenium
- 特点:支持多种浏览器和编程语言,灵活性高。
- 适用场景:复杂的Web应用自动化测试,跨浏览器兼容性测试。
Robot Framework
- 特点:基于关键字驱动,语法简洁,易上手。
- 适用场景:快速搭建自动化测试,适合非开发人员及跨平台(Web、移动、桌面)自动化。
Appium
- 特点:专为移动端设计,支持Android和iOS。
- 适用场景:移动应用的自动化测试,包括原生应用、混合应用和移动Web。
Cypress
- 特点:现代前端自动化工具,基于JavaScript,性能好。
- 适用场景:前端开发驱动的Web应用测试,适合单页面应用(SPA)。
Playwright
- 特点:由微软开发,支持多浏览器自动化,功能强大。
- 适用场景:复杂的Web应用跨浏览器测试和高性能自动化。
总结
- Selenium适合复杂Web自动化。
- Robot Framework适合快速搭建自动化,面向非开发人员。
- Appium用于移动端测试。
- Cypress和Playwright适合前端Web自动化。
🍅 selenium框架
1、为什么选择selenium(优点)
1)开源免费
2)支持多浏览器。如Chrome、Firefox、edge浏览器等
3)支持多系统。如Linux、Windows、MacOS
4)支持多语言。Java、python、CSharp、Roby、JavaScript
5)selenium包提供了很多可供测试使用的API
2、selenium缺点
1、浏览器兼容性问题:Selenium支持多种浏览器,但不同浏览器版本和操作系统之间的兼容性问题可能会导致测试结果不准确或不稳定。
2、稳定性问题:Selenium自动化测试依赖于浏览器驱动程序,这些驱动程序可能存在bug或不稳定性的问题,导致测试结果不准确或测试过程中出现异常。
3、维护成本较高:随着测试用例的增加,测试脚本也会变得越来越复杂,需要不断地进行维护和更新。
4、执行效率低下:由于Selenium需要模拟用户的操作,包括页面加载、点击、输入等,因此在执行测试时可能会比手动测试更慢。这可能会导致测试执行效率低下,测试时间变得很长,影响测试进度和效果。
3、selenium自动化测试的原理
4、selenium的三种等待方式
- 强制等待:通过调用Thread.sleep()来使程序阻塞进行
- 隐式等待:作用于driver的整个生命周期,会一直轮询判断元素是否存在;如果不存在,就在设置好的等待时间内不断进行轮询,直到元素被找到(如果超过时间还未找到就报错);好处是设置简单,但不够灵活。
- 显式等待:当等待的条件满足后(一般用来判断需要等待的元素是否加载出来),就继续下一步操作;等不到就一直等,如果在规定时间内都没找到,就报异常;显示等待比较灵活,但每次查找元素都需要单独设置
如果是等待页面中的某一个元素加载,就用显示等待;等待整个页面的加载就用隐式等待,隐式等待可以跟强制等待搭配使用(有时候隐式等待可能不生效),但注意隐式等待不能和显示等待一起用。
5、selenium的八大定位方式
6、selenium文本框输入内容
⭐️最后的话⭐️
总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁
相关文章:

浅谈UI自动化
⭐️前言⭐️ 本篇文章围绕UI自动化来展开,主要内容包括什么是UI自动化,常用的UI自动化框架,UI自动化原理等。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何问题…...
三、k8s快速入门之Kubectl 命令基础操作
⭐️创建Pod [rootmaster ~]# kubectl run nginx --imageharbor.tanc.com/library/ngix:latest kubectl run --generatordeployment/apps.v1 is DEPRECATED and will be rmoved in a future version. Use kubectl run --generatorrun-pod/v1 or kbectl create instead. deplo…...

深度学习-BP算法详解
BP(Back Propagation,反向传播)是训练神经网络的重要算法之一。它通过计算误差并将误差反向传播,以更新神经网络中的权重和偏置,进而使模型更好地拟合数据。 1. BP算法的基本原理 反向传播的基本思想是: …...

Java审计对比工具JaVers使用
最近有个需求,需要将页面的内容生成excel或者word文档,而且每次的修改都需要生成新的版本,同时需要记录每次修改变化的内容。我们会把每次的修改的内容提交赋值给一个java对象,同时存储到数据库一条新数据,对应数据表一…...

unity中预制体的移动-旋转-放缩
unity中预制体的移动-旋转-放缩 左上侧竖栏图标介绍Tools(手形工具)Move Tool(移动工具,单位米)Rotate Tool(旋转工具,单位角度)Scale Tool(缩放工具,单位倍数)Rect Tool(矩形工具)Transform Tool(变换工具)图标快捷键对照表工具使用的小技巧…...

【压力测试】如何确定系统最大并发用户数?
一、明确测试目的与了解需求 明确测试目的:首先需要明确测试的目的,即为什么要确定系统的最大并发用户数。这通常与业务需求、系统预期的最大用户负载以及系统的稳定性要求相关。 了解业务需求:深入了解系统的业务特性,包括用户行…...
ubuntu常用基本指令简记
一、在线帮助 1、help Linux命令可以分为内部命令和外部命令,内部命令就是由Linux默认Shell-bash提供的命令,而非bash提供的命令就是外部命令。 对于内部命令,可以使用help命令来获取帮助 形式为 help 指令 2、man 在日常使用中碰到的绝…...
【解决方案】用git reset --hard重置了提交但是发现reset了一些本不该reset的内容,是不是寄了?
使用 git reset --hard [commit_id] 命令后,所有的更改(包括暂存区和工作区的更改)都会被重置到指定的提交。如果想要撤销这个操作,恢复到重置之前的状态,可以尝试以下方法: 1. 使用 Git Reflog 恢复 Git…...

ACM模式下Java读取控制台输入注意事项及输出规范化
背景 在ACM模式下。需要我们去接受输入的参数,一般是使用Scanner去读取控制台输入的参数System.in。 不熟悉的情况下,很容易出现问题,针对常见的问题做一个总结。 一、nextXxx 如next,nextInt,nextFloat,…...
面试题整理 2
总结了本次面试遇到的值得整理记录的面试题。 目录 变量赋值判断 变量判断 Foreach使用 Mysql优化策略 合理的索引设计 查询优化 数据表结构设计 配置优化 合理使用事务 定期维护数据库 使用缓存 监控与性能分析 Redis主从复制 介绍 配置 示例 Redis 数据类型…...

华为自研仓颉编程语言官网上线 首个公测版本开放下载
仓颉编程语言官网正式公开上线,同时首个公测版本开放下载。本次仓颉编程语言官网上线了首页、在线体验、文档、学习、下载、动态以及三方库共六个模块,可供开发和学习和体验。 据悉,仓颉编程语言是在今年6月的华为开发者大会上正式公布&…...

NVR监测软件/设备EasyNVR多品牌NVR管理工具/设备对城市安全有哪些具体益处?
在智慧城市的建设中,各种先进的技术系统正发挥着越来越重要的作用。其中,NVR监测软件/设备EasyNVR作为一种高效的视频边缘计算网关,不仅能够实现视频数据的采集、编码和存储,还能与其他智慧城市系统进行深度集成,共同推…...

MFC工控项目实例二十八模拟量信号每秒采集100次
用两个多媒体定时器,一个定时0.1秒计时,另一个定时0.01秒用来对模拟量信号采集每秒100次。 1、在SEAL_PRESSUREDlg.h中添加代码 class CSEAL_PRESSUREDlg : public CDialo { public:CSEAL_PRESSUREDlg(CWnd* pParent NULL); // standard constructor&a…...

安装scrcpy-client模块av模块异常,环境问题解决方案
背景 使用 pip install scrcpy-client命令出现以下报错 performance hint: av\logging.pyx:232:5: Exception check on log_callback will always require the GIL to be acquired. Possible solutions: 1. Declare log_callback as noexcept if you control the definition …...

硅谷甄选(11)角色管理
角色管理模块 10.1 角色管理模块静态搭建 还是熟悉的组件:el-card、el-table 、el-pagination、el-form <template><el-card><el-form :inline"true" class"form"><el-form-item label"职位搜索"><el-…...

C语言结构体 变量对齐原理
以32位Linux为例,默认对齐值是4. 对齐原则通常有以下几种: 第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐参数)的整数倍的地址上。结构体总大小为最大对齐参数的整数倍。嵌套结构体要对齐到…...
【oracle】正则表达式
文章目录 1.介绍1.1 什么是正则表达式1.2 什么是Oracle正则表达式 2. Oracle正则表达式的基础知识2.1 常用的元字符2.2 常用的转义序列2.3 常用的量词 3. Oracle正则表达式的函数3.1 REGEXP_LIKE3.2 REGEXP_SUBSTR3.3 REGEXP_REPLACE3.4 REGEXP_INSTR3.5 REGEXP_COUNT 4. Oracl…...

如何找到网上爆款内容,快速复制扩大品牌声量
社媒内容爆款复制是现代营销中的一个重要策略,它对于提升品牌声量、曝光度和知名度具有显著效果。 首先什么是爆款? 爆款内容指的是在社交媒体或其他在线平台上迅速获得大量关注、分享和讨论的内容。 准确、及时找到这部分品牌相关的爆款内容…...

补齐:相交链表:扣160
梦重新开始的地方 – 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交: 示例: 何解? 暴力&…...

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...