Web自动化框架断言方法实现
创始人
2025-05-30 13:51:43

  • 前言
  • 1、设计用例方法关键字
    • 1.1、获取元素属性值
    • 2.1、断言
  • 2、代码实现
    • 2.1、实现获取元素属性值
      • 2.1.1 函数实现
      • 2.1.2 方法配置
      • 2.1.2 用例调试
      • 2.1.3 html属性
    • 2.2、实现断言
      • 2.2.1 函数
      • 2.2.2 方法配置
      • 2.2.3 用例调试
        • 1)断言结果成功
        • 2)断言结果失败

前言

本文的方法针对下面文章的框架而写
https://blog.csdn.net/weixin_40331132/article/details/106482043
框架源码下载:
https://download.csdn.net/download/weixin_40331132/85580645
框架源码中没有包含本文代码,请自行按照本文的步骤添加断言方法
针对这编文章中自动化框架的断言,很多人问我如何实现,当时写博客时没考虑断言场景,只是把框架搭建完成,让大家自行扩展,现在我在这里将如何实现断言详细步骤输出。

相信完整的学习完这个内容之后,应该更加熟练的自由扩展这个自动化框架了。

下面是断言用例的一个初如设计方案
在这里插入图片描述

如上图所示,实现断言,需要先获取断言对象的相关属性的值,然后通过对属性的值进行相关校验。来判断用例是否执行成功。

效果视频:

Web自动化框架断言实现

具体实现请仔细阅读后续。

1、设计用例方法关键字

1.1、获取元素属性值

在这里插入图片描述

获取元素属性值内容:

type,localtor,index这三个参数可以将目标元素定位到
value参数传入attribute(属性)类型,通过这个参数来取对应属性的值
返回参数是result 获取元素的value值,然后存放到xxxxx变量中,图中变量就是{xxxxx}变量中,图中变量就是xxxxx变量中,图中变量就是{attr_value}
${result},后面的用例行可以使用到,不理解决可自行搜索自动化测试中的参数化知识点,此处不过多解释

2.1、断言

在这里插入图片描述

断言的内容

参数type,断言对像的数据类型,float(浮点型),int(整形 ),string(字符串)
参数locator, 断言方式:相等、不相等, 大于,小于
参数input, 断言对象,可以参数化
参数check, 判断值
逻辑就是通过 对断言对象 与 判断值 它俩是不是相等(或其它方式判断)得出结论用例是否通过

2、代码实现

2.1、实现获取元素属性值

在这个框架里面实现 ’获取元素属性值‘方法分三步骤
1、在webdriveroperator.py文件 WebdriverOperator 类里添加一个函数get_element_attribute_value实现业务代码
2、将函数在base.ini配置成方法关键字
3、编写用例调试功能

2.1.1 函数实现

编写下面代码之前,先在webdriveroperator.py添加两个import

#用来辅助联元素的方法
from selenium.webdriver.remote.webelement import WebElement
#存放变量的单例类
from basefactory.customfunctiontor import CaseData

在webdriveroperator.py文件 WebdriverOperator 类添加函数get_element_attribute_value
代码如下:

   def get_element_attribute_value(self, **kwargs):'''获取元素属性值kwargs:result: 存放获取到元素值的变量type: 定位器类型locator:元素定位器index:元素序号'''try:res_params = kwargs['result']type = kwargs['type']locator = kwargs['locator']attr_name = kwargs['input']except KeyError:return False, '[获取元素属性值]缺少传参'try:index = kwargs['index']except KeyError:index = 0#先通过已有的获取元素方法获取到元素isOK, result = self.find_element(type, locator, index)#获取元素失败,将失败原因返回if isOK is False:return isOK, resultelement: WebElement = resulttry:value = element.get_attribute(attr_name)    #获取元素的属性值setattr(CaseData, res_params, value)    #将获取到的属性值 存放到 res_params 里去except Exception as e:return False, '[获取元素属性值]执行失败,具体原因:【{}】'.format(str(e))return True, '[获取元素属性值]执行成功,已将元素【{}】的【{}】属性值【{}】存放到变量中'.format(locator, attr_name, value)

2.1.2 方法配置

在base.ini的【Function】下添加一行

获取元素属性值 = get_element_attribute_value

在这里插入图片描述

2.1.2 用例调试

编写用例:

在这里插入图片描述

idresultkeywordtypelocatorindexinputchecktime
1打开网页urlhttps://www.baidu.com
2等待元素可见xpath//*[@id=“kw”]3
3输入xpath//*[@id=“kw”]飞人
4调用用例common-bai
5点击xpath//*[@id=“su”]
9attr_value获取元素属性值xpath//*[@id=“su”]value

直接看第9行用例,它表示:
获取 //*[@id=“su”] (百度按钮)的value 属性的值,存放到变量${attr_value}中

运行框架的入口文件 test_run.py
它自动运行,最终结果如下图
在这里插入图片描述

查看运行日志
在这里插入图片描述

调试成功,

2.1.3 html属性

html有很多属性,如下图(这时不一定全面)
里面红框标记的属性,都可以获取一些文字或数据,全部可以用来断言,要获取对应属性的值,只需要编写用例时,使用’获取元素属性值’,在input字段给出对应的属性名即可。
在这里插入图片描述

接下来可以实现断言方式了

2.2、实现断言

在这个框架里面实现 ’断言‘方法分三步骤
1、在webdriveroperator.py文件 WebdriverOperator 类里添加一个函数case_assert实现业务代码
2、将函数在base.ini配置成方法关键字
3、编写用例调试功能

2.2.1 函数

函数里需要两层判断,

第一层判断,断言对象的数据类型,不同数据类型,断言方式里的实现代码不相同
第二层判断,断言方式,针对不同的判断方式,写出不同逻辑代码与断言结果

在webdriveroperator.py文件 WebdriverOperator 类里添加函数case_assert
代码如下:

	def case_assert(self, **kwargs):'''断言kwargs:type:断言对像的数据类型,float(浮点型),int(整形 ),string(字符串)locator: 断言方式:相等、不相等, 大于,小于input: 断言对象check: 判断值desc:通过 对断言对象 与 判断值 它俩是不是相等(或其它方式判断)得出结论用例是否通过'''try:type = kwargs['type']ass_func = kwargs['locator']ass_obj = str(kwargs['input'])check = str(kwargs['check'])except KeyError:return False, '缺少传参'try:if str.lower(type) == 'string':if ass_func == '相等':isOK, result = (True, '[断言]结果成功,断言对象【{}】与判断值【{}】相等'.format(ass_obj, check)) \if ass_obj == check else \(False, '[断言]结果失败,断言对象【{}】与判断值【{}】不相等'.format(ass_obj, check))elif ass_func == '不等于':isOK, result = (False, '[断言]结果失败,断言对象【{}】与判断值【{}】相等'.format(ass_obj, check)) \if ass_obj == check else \(True, '[断言]结果成功,断言对象【{}】与判断值【{}】不相等'.format(ass_obj, check))elif ass_func == '包含':isOK, result = (True, '[断言]结果成功,断言对象【{}】与包含判断值【{}】'.format(ass_obj, check)) \if check in ass_obj else \(False, '[断言]结果失败,断言对象【{}】与不包含判断值【{}】'.format(ass_obj, check))else:isOK, result = False, '[断言]执行失败,断言【{}】方法不正确,请给出正确的断言方法'.format(ass_func)elif str.lower(type) == 'int' or str.lower(type) == 'float':ass_obj, check = int(ass_obj), int(check) if str.lower(type) == 'int' else float(ass_obj), float(check)if ass_func == '相等':isOK, result = (True, '[断言]结果成功,断言对象【{}】与判断值【{}】相等'.format(ass_obj, check)) \if ass_obj == check else \(False, '[断言]结果失败,断言对象【{}】与判断值【{}】不相等'.format(ass_obj, check))elif ass_func == '不等于':isOK, result = (False, '[断言]结果失败,断言对象【{}】与判断值【{}】相等'.format(ass_obj, check)) \if ass_obj == check else \(True, '[断言]结果成功,断言对象【{}】与判断值【{}】不相等'.format(ass_obj, check))elif ass_func == '大于':isOK, result = (True, '[断言]结果成功,断言对象【{}】大于判断值【{}】'.format(ass_obj, check)) \if ass_obj > check else \(False, '[断言]结果失败,断言对象【{}】不大于判断值【{}】不相等'.format(ass_obj, check))elif ass_func == '小于':isOK, result = (True, '[断言]结果成功,小于对象【{}】大于判断值【{}】'.format(ass_obj, check)) \if ass_obj < check else \(False, '[断言]结果失败,断言对象【{}】不小于判断值【{}】不相等'.format(ass_obj, check))else:isOK, result = False, '[断言]执行失败,断言【{}】方法不正确,请给出下确的断言方法'.format(ass_func)else:isOK, result = False, '[断言]执行失败,原因【{}】类型不存在,请给出正确的数据类型'.format(type)except Exception as e:isOK, result = False, '[断言]执行失败,具体原因:【{}】'.format(str(e))if isOK is False:result += '。截图路径:' + self.get_screenshot_as_file()return isOK, result

2.2.2 方法配置

在base.ini的【Function】下添加一行

断言 = case_assert

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FL4OtLnZ-1679198396310)(en-resource://database/1031:1)]
没配置方法,在用例中使用’断言‘,会提示’断言方法未注册‘
配置完成后,便可以在用例中使用’断言‘方法了

2.2.3 用例调试

下面演示断言成功与失败的两个案例

1)断言结果成功

编写用例如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-buaOhl2s-1679198396311)(en-resource://database/1033:1)]

用例(将图中的注释用例清掉版本):

idresultkeywordtypelocatorindexinputchecktime
1打开网页urlhttps://www.baidu.com
2等待元素可见xpath//*[@id=“kw”]3
9attr_value获取元素属性值xpath//*[@id=“su”]value
10断言string相等${attr_value}百度一下

执行框架入口文件 test_run.py,浏览器结果:
在这里插入图片描述

执行日志:
在这里插入图片描述

测试报告:
在这里插入图片描述

2)断言结果失败

将第id为10的用例的check改成 ’百度一下吧‘
用例如下:

idresultkeywordtypelocatorindexinputchecktime
1打开网页urlhttps://www.baidu.com
2等待元素可见xpath//*[@id=“kw”]3
9attr_value获取元素属性值xpath//*[@id=“su”]value
10断言string相等${attr_value}百度一下吧

执行结果 ,浏览器:
在这里插入图片描述

执行日志:
在这里插入图片描述

测试报告
在这里插入图片描述

调试断言成功,string字符类型的断言很稳定
至于int 与 float数据类型,看官们自己去用吧,用出问题可自行优化。
至此,断言方法已经实现。

本文也是复习了框架扩展新方法的知识点,学会了扩展即掌握了这个框架的精髓。

相关内容

热门资讯

实用的 PyYAML 使用技巧 AML 是一个被广泛使用的数据序列化和配置语言,作为一个开发者,总是不免...
C语言学习之路--指针篇 目录一、前言二、指针一、指针是什么1、指针的重要理解2、指针变量3、其他问题二、指针和指针类型1、指...
最牛,狂赚近70%! 最牛,狂... 【导读】前5月主动权益类基金平均净值增长率为2.43%,最牛业绩逼近70%中国基金报记者 方丽 曹雯...
电容笔和Apple penci... 跟Apple Pencil最主要不同,市场上大部分的电容笔都没有重力的压感࿰...
便携制氧机方案——PCBA/芯...   便携制氧机采用分子筛的吸附性能,通过物理原理,以无油压缩机为动力&#...
考研复试——离散数学 三年疫情都没有笔试,今年恢复,大概率会有笔试。 2023年3月19号&#...
分布式任务处理XXL-JOB 分布式任务处理XXL-JOB 什么是分布式任务调度 对一个视频的转码可以理解为一个任务的执行...
DirectX12(D3D12... 目录1、前言1.1、一些感慨1.2、运行效果展示1.3、示例简介1.4、示例操作说明1.5、本章内容...
小红书运营工具有哪些?新手运营...   很多人多多少少都会觉得小红书运营有一定的难度。但是其实在解决这些难题的时候,我们也...
Jetson NX 配置 py... Jetson NX 配置pytorch 参考文档 官方教程–还得是官方啊 参考博客1 参考博客...
c++ error:cross... 最近在写代码的时候,碰到了 crosses initialization of ......
XShell安装配置教程及云服... 目录一、 XShell的作用二、 下载XShell1.访问XShell官网,填写姓名和...
五年五任!道通科技任命90后董... 【高管动态】深圳市道通科技股份有限公司的董秘,也许是最不好干的岗位之一了。根据道通科技(600208...
C++初阶——前言 目录 1. 什么是C++ 2. C++的发展史 3. C+&...
每周股票复盘:西部矿业(601... 截至2025年5月30日收盘,西部矿业(601168)报收于15.8元,较上周的16.07元下跌1....
特朗普癫了?突然反咬中美贸易协... 知道他会反口,没想到这么快反口。不然为什么叫“疯王”呢?从昨晚到现在,特朗普又搞出三件大事:反咬中国...
DevOps是什么?DevOp... 目录专栏导读一、DevOps是什么?二、为什么会出现DevOps?1、容...
“石家庄富豪”要签50亿美元大... 频繁资产腾挪,收效如何? 作者 | 伍玥 编辑丨高岩 来源 | 野马财经 创新生物医药的出海热潮正在...
【零基础入门SpringBoo... 一、上手第一个程序 1、系统要求 此处以我自己使用的版本为例,在后期学习过程中遇到一...
马斯克黯然下课,临走前给特朗普... 黯然下课,马斯克要走了。5月底,马斯克正式宣布,即将卸任“政府效率部”部长职务,为其在特朗普政府的任...
Scala函数式编程 一、基本函数编程 在Scala 中函数式编程和面向对象编程完美融合在一起了 1 基础概念 1&#...
ChatGPT-4 前两天推出 ChatGPT-4,其创建者 OpenAI 展示了该机器人的增强功能——包...
UEFI 基础教程 (十三) ... 一、 修改UEFI UiApp源代码 修改 FrontPageStrings.uni 与 Front...
首进品牌超30%,餐饮选址新风... 总第4232期作者 |餐饮老板内参内参君逃离商场的餐饮人,正把店开到“高质价比商业体”“可能要撤店了...
94:二叉树的中序遍历 94:二叉树的中序遍历 总结 给定一个二叉树的根节点 root ,返...
03 - 初识Linux进程 ---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中&...
中年男人又一宝?新型护肝科技一... 凌晨一点的上海陆家嘴,写字楼里依然灯火通明。30岁互联网大厂产品经理张磊目不转睛盯着电脑屏幕,手机健...
零入门kubernetes网络... 《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7...
“一部手机游景区”,带你玩转V... “一部手机游景区”已经不再是一个概念,现在各地纷纷大力发展VR智慧景区,...
Pytorch学习笔记--多G... 目录 1--前言 2--报错代码 3--解决方法 1--前言         最近在复现一篇 Pa...