一文3000字从0到1使用Selenium进行自动化测试
对于很多刚入门的测试新手来说,大家都将自动化测试作为自己职业发展的一个主要阶段。可是,在成为一名合格的自动化测试工程师之前,我们不仅要掌握相应的理论知识,还要进行大量的实践,积累足够的经验,以便快速适应工作需求。
今天,笔者就想给大家介绍一些,关于使用Selenium进行自动化测试的实战案例经验。希望对测试新手们有所帮助。
1、测试自动化与Selenium工具
首先,我们要先澄清一个观点,自动化测试不可能完全取代手动测试。换句话说,就是自动化测试是为了减少手动运行测试用例数,帮助快速测试多语言站点,提高测试执行速度;是为了节省手动测试带来的时间成本、计算准确性成本等,而不是为了完全摆脱手动测试。因此,希望测试新手们对此有一个清晰的认知。
事实上,自动化测试的过程很简单,你只需要执行以下步骤:
下面,切回正题。自2000年以来,基于开源工具和应用程序的成本效益、效率、可重复性、准确性和易用性越来越被大家接受和喜爱,因此,使用开源工具进行自动化测试就变得越来越重要。而作为开放源代码工具之一,Selenium工具(简称Selenium)在自动化测试方面,展现了自己的极大优势。
Selenium包含IDE、RC、Webdriver和Grid等组件,主要用于WEB交互和回归测试。它除了具有记录和回放功能外,还能帮助我们将记录的脚本导出为其他语言,包括Java,C#,Python,Ruby,Javascript和PHP等。
除此以外,Selenium web driver还允许我们通过其封装好的API进行自动化脚本开发,更好地辅助回归测试,通过数据驱动DDT,关键字驱动,PO等设计模式的结合应用,可以让我们的自动化脚本更具可靠性,可维护性,及延展性
2、使用Selenium进行跨浏览器测试
顾名思义,跨浏览器测试就是在不同的Web浏览器和设备上,测试Web应用程序是否能够正常使用,以确保其在每个设备和浏览器上都能正常运行的一种测试。
那么,我们为什么需要跨浏览器测试呢?例如,同一个电商页面,在Chrome浏览器中能够正常显示,且操作流畅但并不能确保在同一台机器上IE(通常有不同版本),火狐等浏览器上也能正常显示且操作顺利。这也是为什么产生跨浏览器测试的由来。
如今,跨浏览器测试已成为Web应用程序测试的必需项。Selenium可以帮助我们在同一台计算机上,执行包括Safari、Chrome、Firefox、IE等不同浏览器的测试用例。并且,它还支持多种语言和操作系统。
3、使用Selenium进行测试的一些技巧分享
1)便捷好用的定位器
Selenium web driver中封装的API给我们提供了8中定位页面元素的方式:通过id或name定位,通过class name或tag name定位,通过link text和partial link text定位,xpath定位,CSS定位;同时还提供了模拟页面元素操作方法,键盘操作,JS事件处理等一些方法,来满足与浏览器交互的功能。
2)可利用数据驱动做测试
Selenium还具备其他优秀特质。比如,如果要为不同的输入使用相同的测试和相同的代码,那么,选它就对了。Selenium允许开发人员和质量检查团队进行修改,因为它可以用于系统功能测试,以及浏览器兼容性测试。
另外,Selenium还有测试加速器,可以启动客户端自动化测试。这可以大大缩减你的回归测试周期,为你节约时间。
3)不依赖特定的驱动程序
永远不要依赖于某一种特定的驱动程序,去做自动化测试。因为,不同的浏览器版本针对的驱动程序都是1-1对应的,举个例子,不存在这样的万能驱动程序,可以兼容各个版本各个厂商提供的浏览器。
另外,还可能发生不存在某种驱动程序的可能。比如,并非每一个chrome版本都有与之能对应上的驱动程序,这样就需要对被测浏览器进行范围上的指定,有针对性地选择当前项目中必须测试的那些浏览器等。
4)使用Page Objects
时下,Page Object已成为了测试自动化中的最佳设计模式。因为它不仅能增强测试维护能力,还能减少代码重复。此外,它还是一个面向对象的类(OOC),可以充当被测应用程序页面的接口。
简言之,Page Object是一种面向对象的设计模式,它重新定义了一些内容。如下:网页=类别;页面上的各种元素=变量;用户互动=方法。
因此,它具备以下优点:
由于测试代码和页面代码是分开的。因此,Page Object可以抵制微小的调调整,有助于我们构建更稳固的代码框架。
服务不会通过测试分散,但是该页面提供的所有服务都有一个存储库。
可靠且易于维护。
脚本是可读的,且代码是可重用的,还可以完全消除重复部分。
5)可利用等待代替睡眠,提升测试效率
Selenium具备Thread.sleep()逻辑,可以利用等待代替睡眠,从而提升测试效率。因为,我们都知道,睡眠不仅会减慢测试速度,并且,我们很难确定它什么时候执行完毕;而等待则不同,它能帮我们判断等待时长,并保证测试速度,从而提升我们的测试效率。
Selenium为我们提供了两类常用的等待模式:显示等待和隐式等待,分别用于不同的场景下,两者也可以搭配着使用,从而更好地辅助自动化测试。
6)当时间紧迫时,不要害怕破解Selenium
在工作中,有时候我们会遇到时间比较紧急,但工作量又比较大的情况。这种时候,我们要学会灵活应对。关键时刻,你可以通过入侵Selenium Webdriver,来制作有效的自动化脚本。下面给大家介绍两个快捷技巧。
(划重点啦!!)
技巧1:Test NG报告–屏幕快照链接
使用以下代码,来链接到Test NG报告的屏幕截图。这可以让你快速获取捕获屏幕截图的超链接:reporte.data("<: a href="+"E:\\ screenshot \\"+ screenshot_timestamp+".png"+">:")Click to open
技巧2:检查Web元素的存在
使用下面这串代码,你将可以快速检查Web对象的代码大小并确定特定Web元素的存在:Driver.findElements(pass.ID(“元素-ID”)).size()!=0
写在最后
实际工作中,Selenium还具备很多实用的功能。如果你能充分利用Selenium,就可以创建一个稳定、真实和可靠的UI自动化流程。当然,前提是你得积累Selenium的各种使用技巧,并经常应用他们。
今天的分享就到此结束了,如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......
相关文章:

一文3000字从0到1使用Selenium进行自动化测试
对于很多刚入门的测试新手来说,大家都将自动化测试作为自己职业发展的一个主要阶段。可是,在成为一名合格的自动化测试工程师之前,我们不仅要掌握相应的理论知识,还要进行大量的实践,积累足够的经验,以便快…...

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v9.0版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、标准Java平台,服务端基于Netty编写。 工程开源地址是&am…...

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64
1.交叉编译是什么,为什么要交叉编译 编译:在一个平台上生成在该平台上的可执行代码交叉编译:在一个平台上生成在另一个平台上的可执行代码交叉编译的例子:如51单片机的可执行代码(hex文件)是在集成环境kei…...

安防监控视频汇聚平台EasyCVR修改录像计划等待时间较长是什么原因?
安防监控视频EasyCVR视频融合汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检…...
深度学习调参指南
1. 选择合适的模型架构 模型的结构(层数和宽度),参数配置,尽量用已经有效的模型 2. 选择优化器 针对具体的问题,从选择常用的优化器开始,进行比较 3. 选择BatchSize 1). Batch Size决定训练速度,但是不影响验证集…...
MYSQL 优化常用方法
1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可…...

isp调试工具环境搭建及其介绍!
一、isp调试环境搭建: 后期调试isp,是在rv1126提供的RKISP2.x Tuner工具上进行调试,所以我们大前提必须要把这个环境和一些操作先搞熟悉来,后面有一些专用术语,我们遇到了再去看,现在专门看一些专用术语&am…...

word显示书签并给书签添加颜色
CTRg 定位书签 在 Word 的用户界面中,没有直接的选项可以批量为所有书签设置颜色。但你可以使用 VBA 宏或者编写自定义的功能来实现这个需求。这里给出一个简单的 VBA 宏,它可以设置当前文档中所有书签内文本的颜色:vba Sub ColorAllBookmark…...
Rust系列(四) trait备忘录(持续更新)
上一篇:Rust系列(三) 类型系统与trait 基于官方文档进行简单学习记录,保证所有示例是可运行的基本单元。测试rust程序除了使用官方的playground之外,还可以通过定义[[example]]来运行程序。 文章目录 1. Deref2. DerefMut 1. Deref 用于不可…...
贪心算法总结及其leetcode题目N道
1 我为什么要写这个总结 1.1 字节笔试题 小明在玩一场通关游戏,初始血量为1,关卡有怪兽或者有血包(正数就是血包可回血数,负数说明是怪兽的伤害值),当捡到血包时会加血量,碰到怪兽时会掉血&am…...
k8s的namespace一直处于terminating的解法
先试了强制替换,无法替换掉,强制删除,也删除不掉namespace [rootmaster k8s-study]# vi ns-demo.yaml [rootmaster k8s-study]# kubectl create -f ns-demo.yaml namespace/demo created [rootmaster k8s-study]# kubectl get -f ns-demo.ya…...

JAVA面试总结-Redis篇章(六)——数据过期策略
Java面试总结-Redis篇章(六)——数据过期策略 Redis数据删除策略——惰性删除Redis数据删除策略——定期删除 Redis数据删除策略——惰性删除 Redis数据删除策略——定期删除...

【LLM】大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model
大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model 快速了解预训练预训练模型评估微调有监督微调(SFT)人类反馈的强化学习(RLHF)RLHF结果局限性安全性预训练的安全性安全微调上手就干使用登记代码下载获取模型转换模型搭建Text-Generation-WebUI分发模型…...
Android是如何识别USB信号的
Android设备通过USB接口与外部设备通信时,会通过USB控制器(USB Controller)与USB设备进行通信。USB控制器是Android设备的一个硬件组件,它负责管理USB总线并控制所有USB设备的连接和通信。 当一个USB设备被插入Android设备的USB接…...
机器学习前言
1.机器学习和统计学关系 2.机器学习的发展 3.机器学习与深度学习的相同点与不同点 4.机器学习和深度学习优缺点 一、机器学习和统计学关系 机器学习和统计学密切相关,可以说机器学习是统计学在计算机科学和人工智能领域的应用。机器学习和统计学在方法论和技术上有…...

Java另一种debug方法(not remote jmv debug),类似python远程debug方式
这种Debug类似python的debug方式,是运行时将业务代码及依赖推送到Linux并使用Linux的java运行运行程。只要本地能运行,就能自动将代码推送到Linux运行,不需打包及设置远程debug jvm参数,适合一些项目Debug调试 运行时会推送一些依…...

【QT】Day4
1> 思维导图 2> 手动完成服务器的实现,并具体程序要注释清楚 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //…...
在CSDN学Golang云原生(Kubernetes Pod 有状态部署)
一,StatefulSet部署MongoDB集群 Kubernetes StatefulSet 是 Kubernetes 中的一种资源类型,它能够保证有状态服务(Stateful Service)的唯一性和顺序部署,适用于需要持久化存储、网络标识、状态管理等场景。MongoDB 是一…...
sql-从一个或多个表中向一个表中插入 多行
INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需 要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入 多行。 基本语法格式如下: INSERT INTO 目标表…...

ElementUI 实现动态表单数据校验(已解决)
文章目录 🍋前言:🍍正文1、探讨需求2、查阅相关文档([element官网](https://element.eleme.cn/#/zh-CN/component/form))官方动态增减表单项示例3、需求完美解决4、注意事项 🎃专栏分享: &#…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...