web自动化测试:Selenium+Python基础方法封装(建议收藏)

01、目的

web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”,通常都会作为广大测试从业者的首选学习对象,相较于C/S架构的自动化来说,B/S有着其无法忽视的诸多优势,从行业发展趋、研发模式特点、测试工具支持,其整体的完整生态已经远远超过了C/S架构方面的测试价值。这篇文章,我们将深入探讨在Python中如何将Selenium的一些方法进行封装和二开,以便我们更高效地在自己的测试项目中灵活运用

整理了一些软件测试方面的资料、面试资料(接口自动化、web自动化、app自动化、性能安全、测试开发等),有需要的小伙伴可以点击文末小卡片关注我的微信公众号,无套路自行领取~

02、封装

既然选择了Python这门语言来实现web自动化,那我们就不得不讲到一个重要的概念,那就是面向对象编程理念中的封装。就字面意思来理解的话,就像是把各种物品放入一个箱子内,日后需要使用的话就必须从这个箱子里拿才可以获取那个放入的物品。而这个比喻内的箱子就是python内的类,而各类物品则是我们自己根据需要自定义的各种属性和数据、方法,后续需要使用这些属性、数据、方法时,只要引入对应的类并实例化即可。

2.1 基础功能分装

我们就先从最基本的浏览器操作开始,这里会遵循一些简单的日常业务操作进行介绍,并且对类内的方法进行拆解,逐一介绍。文中的代码会比较简单,也是方便大家可以更顺利的根据这些功能封装进行二开,无论是健壮性加强或者业务判断都可以自由添加其中。

我们定义的类名为:BrowserDriver,构造函数传入browser。

2.1.1 开启浏览器

这里解释一下,ChromeOptions()这个方法是chrome浏览器的参数对象,用来配置浏览器启动时的一些参数与属性,这里添加的是浏览器启动后不显示“正受到自动测试软件的控制”的提示,用法比较简单,add_experimental_option这边是添加试验性质的参数,另外比较常用的还有add_argument,add_extension(添加启动项、添加扩展)等方法。

FirefoxProfile()这个是用来指定火狐浏览器内用户设定档案,一般可以开启或关闭某些浏览器内的功能来达到我们的测试业务需求,如果你用selenium启动火狐的话都会默认新建一个这样的档案,那在代码中的话你可以指定档案的保存路径并在后续对其指定功能进行开启或关闭。

2.1.2 检查URL

封装的功能比较简单的,这里检查URL内是否含有http,大家可以根据自己的需求将判断逻辑这块加强,将错误之后抛异常的动作实现成自动添加http或https至url的开头处等都可。

如果你的UI测试中不需要将用例的结果进行数据持久化,可以替换两个判断分支中的业务操作,打印到后台还是写入文件根据自己的测试流程要求来自定义即可。这里的数据库操作使用了sqlalchemy模块,我们定义db创建一个ORM基类,拿博主的脚本举例,我的ORM模型名(表名)为TestCaseResult,将各个测试场景(URL格式检查与浏览器对象检查)下的错误场景报错信息写入。我们的基本信息如下,执行后插入一条数据,包含错误代码,结果具体信息与一个复合用例的标识判断。err_message = TestCaseResult(status='100200', result="URL格式有误", is_composite='False')可以看出错误信息的内容还是比较简单的。我们只需在执行过后检查对应的自动化平台结果页面即可看到对应报错信息。

另外使用sqlalchemy操作数据库前记得创建对应的数据库对象。

这里在连接参数后有三个选项,分别为:

echo: 当设置为True时会将orm语句转化为sql语句打印,一般debug的时候可用

pool_size: 连接池的大小,默认为5个,设置为0时表示连接无限制

pool_recycle: 设置时间以限制数据库多久没连接自动断开

当然我们本着易维护的思想理念,还是将数据库接连的动作进行常量设定。

接下去使用engine = create_engine(DB_URI,echo=True)进行数据库的连接,因为操作数据库必须创建会话来进行控制,所以我们还需要使用session = sessionmaker(engine)()创建一个会话。之后就如最初的代码中所进行的操作来进行数据库的数据写入。当然以上说的这些操作大家应该将其也封装为一个或者多个类。

2.1.3 浏览器窗口操作

窗口操作也是比较常用的基础功能之一,以下将基本的最大化、最小化、前进、后退、刷新、设定尺寸大小封装起来。之后会判断可变参数的长度,根据传入的长度不同进行对应的窗口操作。

2.1.4 切换窗口

另一个日常较为频繁的业务操作就是切换窗口,也就是我们的标签页,我们可以使用遍历的方式获得一个当前所有的窗口列表,通过传递默认参数title来进行当前窗口的切换,直到匹配到与title相同的窗口。

2.1.5 获取页面元素

元素定位自然不必多说了,web自动化中的基础操作,也是日常接触的最多的功能,封装的功能只需传两个参数,定位方式与元素对应的属性值。这里可以改造的地方还是有很多的。比如不手动指定,通过持久化或者文件指定对应要查找的元素,需要定位的元素属性也可以通过其他方式进行抽出,总之二开的话大家可以根据业务需求进行灵活多变的定制。另外elements的定位就不演示了,大家举一反三即可。

2.1.6 层级元素定位

层级元素定位的实现逻辑其实就是根据链式写法产生的,原生的find_element()方法是可以从当前捕捉到的元素层级开始往下再次定位的,我们就利用这一特性,先使用上一个定位元素的方法get_element()来再一次进行find_element()方法,这样就可以实现层级元素的定位操作。这里有一点需要注意的是,虽然原理如此,但切不可偷懒,调用两次get_element(),因为这个方法本身含有driver对象,两次调用会使程序无法识别具体使用的是哪个对象,从而导致报错。

2.1.7 信息输入操作

输入操作的封装也是相对比较直白的,定位元素并传值即可。需要注意的点就是如果定位的元素本身出了问题的话,我们可以利用判断条件来规避一些异常的情况。

2.1.8 点击操作

逻辑同信息输入操作,大家自行体会。

2.1.9 控件操作

控件的种类还是比较多的,这里就举个比较典型的例子。下面封装的是一个复选框(勾选框),这里的传参前两个就不介绍了,最后一个表示复选框目前的勾选状态,我这里定义的0为未勾选,1为已勾选状态。这里的实现逻辑大致为:判断对象是否为勾选状态,再判断是否需要勾选,结合两种状态一般就是有4个结果,勾选状态下勾选和不勾选、未勾选状态下勾选和不勾选。大家可以根据以下的判断逻辑解读一下。

2.1.10 元素可见性操作

对于页面上的某些元素是否可见,我们也可以封装一个方法,用来增强整体的元素定位方法的健壮性,该方法可以直接在元素定位时进行调用,将原有的返回对象进行预先判断。

以上就是一些日常工作中使用的比较频繁的selenium内置方法的封装示例。

如果你还有许多困惑,那么我整理的视频资源和文档会是你的良师益友,或许可以给你带来一些实际性的帮助与突破【保证100%免费】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud学习2(Spring Cloud Netflix)负载均衡Ribbon、Feign负载均衡、Hystix服务熔断

文章目录负载均衡RibbonRibbon的作用代码实现生产者cloud1_provider实现配置文件在HiController中编写以下代码启动集群消费者cloud1_consumer实现引入依赖编写配置文件编写启动类,并给RestTemplate配置LoadBalanced注解编写RestController来测试Feign负载均衡简介F…

信息收集与运用

目录 一.实验目的 二.实验原理 三.实验内容 一.收集信息 二.猜解密码 三.密码强度检测 源码 测试用例 程序输出结果​编辑 ​四.小结与讨论 1.举出保护个人敏感信息的方法(最少三点)。 2.如何提高你的密码强壮性,以避免黑客利用密…

Java类加载过程面试总结

什么是Java的类加载机制 Java 虚拟机一般使用 Java 类的流程为:首先将开发者编写的 Java 源代码(.java文件)编译成 Java 字节码(.class文件),然后类加载器会读取这个 .class 文件,并转换成 jav…

05.List的介绍

1. List 在集合框架中,List是一个接口,继承自Collection。 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示: Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍…

仿真与测试:单元测试与Test Harness

本文描述单元测试的概念,以及Test Harness建立的方法和简单的单元测试过程。 文章目录1 单元测试1.1 场景举例1.2 简单的测试方法2 Test Harness建立2.1 模型配置2.2 创建Test Harness3 总结1 单元测试 单元测试,简单来说就是在Simulink模型中只测试一小…

63-哈希表

目录 1.哈希表的概念 2.哈希函数的概念 3.哈希函数的设计 3.1.key为整型时哈希函数的设计 3.1.1.普通整数 3.1.2.负整数 3.1.3.大整数 PS:哈希函数设计的3个要求: PS:2种类型的哈希函数(大整数) 3.2.key为其…

【数据结构】树与二叉树的基本概念及性质

目录 一、树的基本概念 1️⃣树的定义 2️⃣基本术语 3️⃣树的性质 二、二叉树的概念 1️⃣二叉树的定义 2️⃣特殊二叉树 3️⃣二叉树的性质 参考资料 一、树的基本概念 1️⃣树的定义 数据结构中的树是什么❓ 树是 个结点的有限集。有且仅有一个特定的称为根(上图A结点…

C++ [内存管理]

本文已收录至《C语言》专栏! 作者:ARMCSKGT 目录 前言 正文 计算机中内存分布 C语言的内存管理 内存申请函数 内存释放函数 C内存管理 new操作符 delete操作符 特性总结 注意 原理探究 operator new和operator delete函数 operator new的底…

【C++】STL之string的使用和模拟实现

初阶的C语法和基本的类和对象我们已经学过了,下面我们会步入一段新的旅程。本章我们将初步了解STL(标准模板库),并且深入探讨其中一个非常重要的容器———string。 目录 (一)STL简介(了解即可) &#xf…

Hashtable、HashMap、ConcurrentHashMap的区别

作者:爱塔居 专栏:JavaEE 作者简介:大三学生,希望和大家一起进步。 Hashtable和HashMap、ConcurrentHashMap 之间的区别? HashMap:线程不安全,key允许为null Hashtable:线程安全,使用synchronized锁Hashta…

2.4 特征工程

2.4 特征工程 李沐 B站:https://space.bilibili.com/1567748478/channel/collectiondetail?sid=28144 课程主页:https://c.d2l.ai/stanford-cs329p/ 1. 为什么需要特征工程: 特征工程 数据集进行特征提取,以使机器学习模型在对经过特征工程处理过的数据进行学习时可以更快…

(02)基础强化:面向对象,变量作用域,封装,继承,虚方法,可访问性

一、面向对象概念复习 1、什么是面向对象?OOP(Object-Oriented Programming) 一种分析问题的方式,增强了程序的可扩展性。 OOP面向对象编程 OOA面向对象分析 OOAD面向对象分析与设计(…

Redis管道(pipeline)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言1、管道(pipeline)的基本概念2、管道实操3、小总结前言 在正式讲解Redis管道之前,先引入一个面试题: 如何优化频繁命令往返造成的性能瓶…

【Hello Linux】线程控制

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍linux中的线程控制 线程控制线程创建线程等待线程终止线程分离线程id和进程地址空间布局线程创建 我们可以通过下面pthread_c…

蓝桥杯基础14:BASIC-1试题 闰年判断

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 给定一个年份,判断这一年是不是闰年。 当以下情况之一满足时,这一年是闰年: 1. 年份…

Java面向对象 - 封装、继承和多态的综合练习(答案+知识点总结)第1关:封装、继承和多态进阶(一)+ 第2关:封装、继承和多态进阶(二)

目录 第1关:封装、继承和多态进阶(一) 报错总结 & 注意事项: 第2关:封装、继承和多态进阶(二) 源码: 报错总结 & 注意事项: 思维导图免费制作网站&#xf…

软考软件设计师下午试题一

数据流图基本图形元素 外部实体 外部系统是当前系统之外的系统 数据存储 在里面存储数据后还能取出来用 跟实体没有关系,他负责存储加工的数据或者提供数据给加工 加工 灰洞的解释比如输入需要两个才能得到输出的,但是他只输入了一个就是灰洞 数…

Matlab傅里叶级数展开(附结果图)

Matlab傅里叶级数展开(附结果图) 代码下载链接 代码下载链接 代码下载链接 如下图所示:

“唯一靶点”的华堂宁会成控糖爆品吗?

一上市,两次“断货”的货华堂宁有爆品那味儿了。 2022年10月28日华领医药-B(02552.HK)公告华堂宁(多格列艾汀)正式进入商业化,一周后各个渠道便进入到了断货和限售的状态。 对于一个不在传统九大降糖药品…

元宇宙与网络安全

元宇宙是一种虚拟现实空间,用户可以在计算机生成的环境中进行互动。元宇宙的应用范围很广,比如房地产,医疗,教育,军事,游戏等等。它提供了更具沉浸感的体验,更好地现实生活整合,以及…
最新文章