web自动化测试:Selenium+Python基础方法封装

news2024/11/26 14:24:28

推荐阅读:

[内部资源] 想拿年薪30W+的软件测试人员,这份资料必须领取~

Python自动化测试全栈+性能测试全栈,挑战年薪40W+

正文

01 目的

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

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内置方法的封装示例。


资源分享【这份资料必须领取~】

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Fiddler(4):在fiddler会话栏中添加IP列,设置抓HTTPS的请求证书安装

Fiddler(4):在fiddler会话栏中添加IP列 在fiddler会话栏中添加IP列 1、点击菜单栏rules——customize rules…或者在右侧响应栏中点击FiddlerScript栏;如下图: 2、ctrlf搜索“static function main” 3、在main函数里加入下面一行代码&…

Kafka极客 - 09 Kafka Java Consumer 多线程开发实例

文章目录1. Kafka Java Consumer 设计原理2. 多线程方案3. 代码实现4. 问题思考目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序…

对称美学 华为OD真题 100

import java.util.Scanner; import java.util.*; import java.util.stream.Collectors; import java.math.BigInteger;class Main {public static void main(String[] args) {// 处理输入Scanner in new Scanner(System.in);int t in.nextInt();long[][] cases new long[t][…

Python学习笔记-模块

目录 一、模块的概念 二、自定义模块 1.创建模块 2.使用import语句导入模块 3.使用from...import 语句导入模块 4.模块搜索目录 4.1模块默认搜索目录 4.2临时添加目录 4.3增加.pth文件 4.4 在PYTHONPATH环境变量中添加 三、以主程序的形式执行 四、python中的包&am…

计算机毕业设计php_thinkphp_vue的家乡石泉网站-乡村家乡旅游信息网站

运行环境 开发语言:PHP 数据库:MYSQL数据库 应用服务:apache服务器 使用框架:ThinkPHP:vue 开发工具:VScode/Dreamweaver/PhpStorm等均可 项目简介 目前家乡石泉市是一个有不同民族“大杂居,小聚居”的地方,所以对于发展家乡特色业还是比较有优势…

C++初阶 priority_queue(优先级队列)的使用和模拟实现

作者:小萌新 专栏:C初阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍优先级队列的使用和模拟实现 优先级队列的使用和模拟实现priority_queue的使用priority_queue的介绍priority_queue的定义priority…

Solid.js前端新秀框架 力压 web3.js 框架

SolidJS 是什么?SolidJS是一个声明式、高效且灵活用于构建用户界面的 JavaScript 库。 Solid 号称拥有 JSX 语法,类似于 React hook 的语法,你可以用现代化的开发方式,获得性能最快的代码。 框架本身只有7 KB大小,无需…

【在SpringBoot项目中删除相册数据--Controller层】

在AlbumController中添加处理请求的方法: 请求路径:/album/delete请求方式:POST请求参数:Long id响应结果:JsonResult >>> state:20000 具体代码为: // http://localhost:9080/album/delete ApiO…

常用Assignment写作句型怎么积累?

Assignment是留学生在国外留学期间常见的写作内容。很多留学生在最初接触Assignment时往往会感到无从下手,更不知道该怎么去表达自己想要表达的内容。其实,Assignment写作并没有想象中那么难,在Assignment写作中有很多句型是经常用到的&#…

Windows win10 win11 多屏幻灯片放映壁纸 多屏设置不同的壁纸 多屏不同幻灯片壁纸

背景:windows 可以右键为不同的显示器设置不同的壁纸(需要先关闭虚拟桌面)。但是 slideshow 的不支持多个屏幕。 目前看这个问题是没有官方的方案的,理论上有一个收费软件可以解决,或者用*版,但是不想给钱…

React Fiber树的构建和替换过程

文章の目录前言mount 过程update 过程写在最后前言 React Fiber树的创建和替换过程运用了双缓存技术,即先在内存中创建 fiber 树,待 fiber 树创建完成以后,直接将旧的 fiber 树替换成新的 fiber 树,这样做的好处是省去了直接在页…

datax之channel学习

一般来说datax只需要我们设置reader和writer,但是是什么连接了reader和writer呢? 就是channel! 这个有什么用? 慢慢学习。 core.json [devusercdp-node12 /data/DATA_DIR/share/dataingestion/conf]$ cat core.json { &quo…

应急物资仓库可视化管理系统-智慧应急物资装备管理系统

1. 项目概述 应急物资仓库可视化系统(智慧物资管理系统 DW-S300)是一套成熟系统,依托互 3D 技术、云计算、大数据、RFID 技术、数据库技术、AI、视频分析技术对 RFID 智能仓库进行统管理、分析的信息化、智能化、规范化的系统。 应急物资,是每当灾害发…

Cyanine7 NHS|CY7-N-羟基琥珀酰亚胺|CY7-NHS ester

Cyanine7 NHS|CY7-N-羟基琥珀酰亚胺|CY7-NHS ester 中文名称:CY7-N-羟基琥珀酰亚胺 英文名称:Cyanine7 NHS 性 状:深绿色粉末 分子量:827.94 Abs/Em Maxima:675/694nm 分子式:C41H46N3NaO10S2 溶解性…

【网站架构】项目越迭代越难、严重延期?那是没处理好变化

大家好,欢迎来到停止重构的频道。 本期,我们讨论网站系统的扩展性。 扩展性指的是网站系统应该如何更好地处理需求变化、版本迭代。 对于有几个项目经验的人来说,可能对这样的问题不以为然,毕竟devops、CI/CD、git、敏捷开发、…

Pytest测试框架(一):Pytest介绍与安装,Pytest编写规则及pytest.main()的参数

Pytest测试框架(1):Pytest介绍与安装 pytest简介: pytest是python的第三方单元测试框架,比自带的unittest更简洁和高效,同时兼容unittest框架。 它还有如下优点: 1、简单灵活,容易上手,文档丰…

计算机毕业设计django基于python精品课程在线学习系统

项目介绍 在各学校的教学过程中,租房系统是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的精品课程系统的平台,这样可以有效地解决课程学习系统混乱的局…

线上卡顿监控

文章目录1. 卡顿与ANR的关系2. 卡顿原理3. 卡顿监控3.1 WatchDog3.2 Looper Printer3.2.1 监控TouchEvent卡顿3.2.2 监控IdleHandler卡顿3.2.3 监控SyncBarrier泄漏4. 小结平时看博客或者学知识,学到的东西比较零散,没有独立的知识模块概念,而…

世界杯期间,抖音的涨粉秘诀是什么?

纵览11月抖音涨粉趋势,生活、体育、美食等领域有不少账号迅速圈粉。据新抖『粉丝飙升榜』TOP30显示,11月上榜达人的更替率高达83.3%,其中,有达人凭3条人物随拍视频涨粉千万;有达人凭硬核美食教程,被网友戏称…

网络工程毕业设计 SSM音乐管理系统(源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.3 系统结构设计4 项目获取1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品,【…