UI自动化测试框架搭建 —— yaml文件管理定位元素

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

介绍

本框架基于Python语言进行开发,使用pytest管理用例运行,使用Jenkins+Allue进行脚本执行与报告展示。

适用于Web、H5、IOS、安卓的ui自动化测试

元素封装

对于一个需要定位的元素,我们一般就需要用到它的 描述定位方式定位语句使用时的变量名

由于部分元素出现时间较长,增加一个等待时间

我们编写一个Locator类,来描述一个定位元素

class Locator:
    """
    页面元素封装
    """
 
    def __init__(self, element, wait_sec=3, by_type='id', locator_name='', desc=''):
        """
        @param element: 定位语句
        @param wait_sec: 等待时间 默认3秒
        @param by_type: 定位方式
        @param locator_name: 变量名
        @param desc: 描述
        """
        self.element = element
        self.wait_sec = wait_sec
        self.by_type = by_type
        self.locator_name = locator_name
        self.desc = desc
 
    def __str__(self):
        return f'{self.desc}:(By:{self.by_type},element:{self.element})'
 
    def __repr__(self):
        return f'{self.desc}'

 

重写__str__方法是为了使用print打印的时候可以显示指定内容

比如有个如下的元素,使用print打印它的实例化对象就可以展示

挂号:(By:xpath,element://p[text()="挂号"])

registered = Locator(
        element='//p[text()="挂号"]',
        wait_sec=3,
        by_type="xpath",
        locator_name="registered",
        desc="挂号")
print(registered)  # 挂号:(By:xpath,element://p[text()="挂号"])

后面在调试或者日志打印的时候可以展示的更易于阅读

Yaml文件格式规定

为了方便多端(h5、ios、安卓等)元素调用的统一,yaml格式规定如下:

pages:
  - page:
      pageName: home_h5
      desc: 首页
      locators:
        - { desc: "挂号",type: "xpath",value: '//p[text()="挂号"]', name: "registered" }
  - page:
      pageName: home_ios
      desc: 首页_ios
      locators:
        - { desc: "挂号",type: "xpath",value: '//XCUIElementTypeStaticText[@name="挂号"]', name: "registered" }

 

最外层是pages表示多个页面

下层是page+desc+locators 表示单个页面的名称、描述、具体的元素定位

我们只要在执行脚本前正确读取该yaml文件,并将它的locators中的元素一一使用Locator实例化,就可以使用了

读取yaml文件

path:yaml文件的存放路径

with open(path, 'r+', encoding='utf-8') as f:
    data_dict = yaml.load(f, Loader=yaml.FullLoader) or {} 

将读取出来的数据使用Locator实例化

其中desc组合一下页面的描述,变为 页面描述+元素描述

desc = f"{page_desc}_{locator['desc']}"

pages_list = data_dict["pages"]
locator_map = dict()
for page in pages_list:
    page_name = page["page"]["pageName"]
    page_desc = page["page"]["desc"]
    locator_map[page_name] = dict()
    locators_list = page["page"]["locators"]
    for locator in locators_list:
        by_type = locator["type"]
        element = locator["value"]
        wait_sec = int(locator.get("timeout", 3))
        locator_name = locator["name"]
        desc = f"{page_desc}_{locator['desc']}"
        tmp = Locator(element, wait_sec, by_type, locator_name, desc)
        locator_map[page_name][locator_name] = tmp

 

 

使用定位元素

传入一个locator_name也就是使用时的变量名我们就可以拿到这个元素的所有信息了

locator_name = "registered"
page_name = "home_h5"
 
locator = locator_map.get(page_name)
if locator:
    locator = locator.get(locator_name)

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

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

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

相关文章

【C++】list的使用

目录 1 构造1.1 无参构造1.2 构造的list中包含n个值为val的元素1.3 用[first, last)区间中的元素构造list1.4 拷贝构造 2 迭代器的使用2.1 begin end2.2 rbegin rend 3 容量操作3.1 empty size 4 获取元素4.1 front back 5 插入、删除、修改5.1 头插-push_front和尾插-push…

聊聊呼声较高的向量过滤搜索及其优化

向量过滤搜索是一种基于条件的向量搜索方法,常用于推荐系统和信息检索等领域,能够帮助用户快速找到在给定条件下与其查询相关的内容。 在 Milvus 社区中,这也是呼声比较高的功能。为满足广大用户的需求,Milvus 在 Knowhere 2.x 版…

Mysql的骚操作说明

Mysql的常规操作 记录些不常用,但是很实用的操作,旨在在MySQL语言能解决的批量操作的问题,不动用其他动态或静态语言的辅助。 1、FROM_UNIXTIME 时间戳转时间格式 select scode,sid,gender,type,FROM_UNIXTIME(report_time) as report_time,FROM_UNIXTIME(add_time) as add…

智慧博物馆信息化系统建设(1)

博物馆RFID藏品管理系统 博物馆藏品保管是一项十分复杂又繁琐的工作。从事保管工作除了经常、及时地进行藏品的登记、分类、编目、保养和修复等一系列工作外,还需要把有关藏品的信息迅速、正确地提供给利用者。要提高保管工作的效率,达到现代化的科学管理,从发展趋势看,进…

Unity之Timeline教程

前言 Unity Timeline是Unity的一种时间轴编辑器工具,用于制作和管理游戏中的动画、剧情以及事件触发。它提供了直观的界面,使得开发者可以通过拖放操作轻松创建和编辑时间轴。 Timeline的使用 创建新的Timeline 在Unity中,选择菜单栏的 Wi…

142基于matlab的移动力过简支梁程序

基于matlab的移动力过简支梁程序,算法采用newmark-belta法,输出简支梁,求解静力位移,自振特性,动力特性。可调节简支梁参数。程序已调通,可直接运行。 142 matlab简支梁自振特性 (xiaohongshu.com)

MPU6050传感器—姿态检测

本节主要介绍以下内容: 姿态检测的基本概念 姿态传感器的工作原理及参数 MPU6050传感器介绍 实验:获取MPU6050原始数据 实验:移植官方DMP例程 一、姿态检测基本概念 1.1 姿态 在飞行器中,飞机姿态是非常重要的参数&#x…

【MATLAB基础绘图第20棒】云雨图

MATLAB绘制云雨图 云雨图(Raincloud plots)MATLAB绘制云雨图横向云雨图竖向云雨图 参考 云雨图(Raincloud plots) 云雨图(Raincloud plots)其实是可以看成核密度估计曲线图、箱形图和抖动散点图的组合图,清晰、完整、美观地展示了所有数据信…

随机森林中每个树模型分裂时的特征选取方式

随机森林中每个树模型分裂时的特征选取方式 随机森林中每个树模型的每次分裂都是基于随机选取的特征子集进行分裂的。 具体来说,对于每个决策树,在每个节点的分裂过程中,随机森林算法会从原始特征集合中随机选择一个特征子集,然…

SpringBoot:Bean生命周期自定义初始化和销毁

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、Bean注解指…

Android:JNI实战,理论详解、Java与Jni数据调用

一.概述 上一篇博文讲解了如何搭建一个可以加载和链接第三方库、编译C/C文件的Jni Demo App。 这篇博文在这个Jni Demo App的基础上,从实战出发详细讲解 Jni 开发语法。 接下来,先用一小节将Jni开发比较重要的理论知识点过一下,然后进行代…

深入解析Python中的break、continue和pass语句

在Python编程中,控制流语句是一种常见的工具,用于控制程序的执行顺序和流程。其中,break、continue和pass语句是控制循环的重要组成部分。本文将深入解析Python中的break、continue和pass语句,包括其基本语法、应用场景和最佳实践…

万字长文详解Java线程池面试题

王有志,一个分享硬核 Java 技术的互金摸鱼侠 加入 Java 人的提桶跑路群:共同富裕的Java人 今天是《面霸的自我修养》第 6 篇文章,我们一起来看看面试中会问到哪些关于线程池的问题吧。数据来源: 大部分来自于各机构(J…

【数据分享】2023年我国省市县三级的住宿服务设施数量(Excel/Shp格式)

宾馆酒店、旅馆招待所等住宿服务设施的配置情况是一个城市公共基础设施完善程度的重要体现,一个城市住宿服务设施种类越丰富,数量越多,通常能表示这个城市的公共服务水平越高! 本次我们为大家带来的是我国各省份、各地级市、各区…

38-WEB漏洞-反序列化之PHPJAVA全解(下)

WEB漏洞-反序列化之PHP&JAVA全解(下) 一、Java中API实现二、序列化理解三、案例演示3.1、本地3.2、Java 反序列化及命令执行代码测试3.3、WebGoat_Javaweb 靶场反序列化测试3.4、2020-网鼎杯-朱雀组-Web-think_java 真题复现 四、涉及资源 一、Java中…

LLM + RecSys 初体验(上)

最近在逛小红书的时候,发现了一个新的GPU算力租赁平台,与AutoDL和恒源云等平台类似。正巧,官网有活动,注册即送RTX 4090三个小时,CPU 5 小时。正巧最近在测试 LLM推荐系统的 OpenP5 平台,果断入手测试! 用…

【Android】细数Linux和Android系统中的伪文件系统

文章目录 前言Linux伪文件系统cgroupfsLinux的cgroupsAndroid的cgroups debugfsfunctionfs(/dev/usb-ffs/adb)functionfs 的引入sysfs是什么 procfs(/proc)pstore(/sys/fs/pstore)selinuxfs(/sys/fs/selinux)sysfs(/sys)参考 前言 做了好些年Android开发,你了解过L…

【GitHub项目推荐--Awesome-Go/Python/JavaScript/Java】【转载】

Awesome 译为令人惊叹的、极好的,GitHub 上有很多 Awesome 开头的开源项目。比如 Awesome-Go、Awesome-Python。 就像汇总常用的软件一样,GitHub上有大量的开源项目,开发者就会根据需要汇总一些常用的好用的资源,并且根据 Awesom…

oracle 19c rac集群管理 ------ 日志管理

oracle 19C rac 数据库的目录结构及日志路径 在Oracle 19c RAC(Real Application Clusters)集群中,有多个组件和层级生成的日志文件,记录着集群的活动、事件和错误信息,用于故障诊断、性能优化和集群管理。以下是常见…

nvm安装与使用教程

目录 nvm是什么 nvm安装 配置环境变量 更换淘宝镜像 安装node.js版本 nvm list available 显示可下载版本的部分列表 nvm install 版本号 ​编辑 nvm ls 查看已经安装的版本 ​编辑 nvm use 版本号(切换想使用的版本号) nvm是什么 nvm是node.js version management的…