一文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、注意事项 🎃专栏分享: &#…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
