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

news2024/10/6 12:06:42

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

🔥 资源分享耗时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自动化测试/测试开发,走向高薪之路

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

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

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

相关文章

万界星空科技mes系统可以为企业带来什么好处

随着信息技术的不断发展,MES生产制造系统的作用不断凸显。万界星空科技MES生产制造可以为企业带来四个方面的好处:提升生产效率、降低生产成本、优化生产过程、提高生产质量。本文将从这四个方面分别进行详细阐述,旨在通过对MES生产制造系统的…

【优先级队列 之 堆的实现】

文章目录 前言优先级队列 PriorityQueue优先队列的模拟实现 堆堆的储存方式堆的创建建堆的时间复杂度堆的插入与删除 总结 前言 优先级队列 PriorityQueue 概念:对列是先进先出的的数据结构,但有些情况,数据可能带有优先级,一般出…

C++11新特性:快速初始化成员变量

在C98中,类成员变量的就地声明通常需要在构造函数中进行初始化。 class MyClass { public:// C98 中的类成员变量声明int myVariable;// 构造函数中初始化MyClass() {myVariable 0;} };并且,C98对类中就地声明要求非常高,如果不是整型或者枚…

java使用easyexcel读取excel内容

java 代码读取excel内容。 使用阿里巴巴easyexcel读取excel内容。 ##excel内容 ##依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.5</version></dependency> ##实体类T…

Adobe Media Encoder 2023下载安装教程,ME 2023安装教程,附安装包和工具,无套路,轻松搞的安装

前言 Adobe Media Encoder是一个视频和音频编码应用程序&#xff0c;可让针对不同应用程序和观众&#xff0c;以各种分发格式对音频和视频文件进行编码。包括专门设计的预设设置&#xff0c;以便导出与特定交付媒体兼容的文件&#xff0c;可以按适合多种设备的格式导出视频&am…

Mybatis集成MySQL使用游标查询处理大批量数据

背景 基于数据的时间范围查询&#xff0c;给符合条件的用户推送积分即将到期的提醒。 初期用户量小使用最普通简单的分页查询扫描数据处理数据没问题。随着用户量的上升表数据已经上千万&#xff0c;每天扫描处理的数量也超百万&#xff0c;limit分页出现了慢sql&#xff0c;…

【EISCOPUS双检索】2024电子、通信与智能科学国际会议(ECIS 2024)征稿通知!

2024年5月24日-27日 中国|长沙 会议重要日期 一轮截稿时间&#xff1a;2024年3月10日 录用通知时间&#xff1a;投稿后7-15天 注册截止时间&#xff1a;2024年5月10日 一、大会背景 随着互联网的不断创新&#xff0c;电子、通信和智能科学已经广泛应用于各个领域。为了为…

HarmonyOS鸿蒙学习基础篇 - 运行第一个程序 Hello World

下载与安装DevEco Studio 古话说得好&#xff0c;“磨刀不误砍柴工”&#xff0c;对于HarmonyOS应用开发&#xff0c;我们首先得确保工具齐全。这就好比要进行HarmonyOS应用开发&#xff0c;我们需要确保已经安装了DevEco Studio&#xff0c;这是HarmonyOS的一站式集成开发环境…

HarmonyOS关于deps、external_deps的使用

在添加一个模块的时候&#xff0c;需要在BUILD.gn中声明它的依赖&#xff0c;为了便于后续处理部件间依赖关系&#xff0c;我们将依赖分为两种——部件内依赖deps和部件间依赖external_deps。 依赖分类 如上图所示&#xff0c;主要分为部件内依赖&#xff08;图左&#xff09;…

一文(10图)了解Cornerstone3D核心概念(万字总结附导图)

Cornerstone3D介绍 Cornerstone3D是一个专门为处理三维医学影像而设计的JavaScript库。 它是Cornerstone项目的一部分&#xff0c;旨在为医学影像社区提供高性能、可扩展且易于使用的开源Web工具&#xff0c;专注于提供交互式的3D医学图像浏览体验&#xff0c;适用于多种医学…

学习Opencv(蝴蝶书/C++)——4.图形和大型数组类型(下)

文章目录 4.5 通过块访问数组(多行多列等范围访问)4.6 矩阵支持的代数运算(运算符重载)4.7 饱和转换4.8 cv::Mat的其他成员函数7. cv::SparsesMat表示N维稀疏数组7.1 基本介绍7.2 引用或者值访问7.2.1 cv::SparsesMat::ptr()7.2.2 cv::SparsesMat::ref()7.2.3 cv::SparsesM…

人民银行成功实现数字人民币与传统支付的互通

西米支付网&#xff08;45ri.com&#xff09;中国人民银行数字货币研究所10月12日在人民银行网站刊发了题为《扎实开展数字人民币研发试点工作》的文章&#xff0c;截至2022年8月31日&#xff0c;已有15个省市的试点地区共计完成了3.6亿笔的交易&#xff0c;交易金额达到了1000…

大小鼠行为刺激-ZL-034B大小鼠跳台仪/多通道跳台记录仪

小鼠跳台实验是一种常用的学习记忆实验方法&#xff0c;它基于条件反射原理&#xff0c;通过观察小鼠在电栅和平台之间跳跃的行为&#xff0c;来研究药物对学习和记忆过程的影响。它适用于各种增智健脑、提高记忆、抗衰老药物和保健品筛选、开发研制。它是初筛药物的理想工具&a…

ubuntu 20.04 aarch64 平台交叉编译 libffi 库

前言 由于打算交叉编译 python&#xff0c;但是依赖 libffi 库&#xff0c;也就是 libffi 库也需要交叉编译 环境&#xff1a; ubuntu 20.04 交叉编译工具链&#xff1a;这里使用 musl libc 的 gcc 交叉编译工具链&#xff0c;aarch64-linux-musleabi-gcc&#xff0c;gcc 版本…

【心得】java反序列化漏洞利用启蒙个人笔记

目录 前置基础概念 java的反序列化利用概念baby题 例题1 例题2 java反序列化启蒙小结&#xff1a; URLDNS链 一句话总结&#xff1a; 简单分析&#xff1a; 利用点&#xff1a; 示例&#xff1a; 前置基础概念 序列化 类实例->字节流 反序列化 字节流->类实…

大模型+自动驾驶

论文&#xff1a;https://arxiv.org/pdf/2401.08045.pdf 大型基础模型的兴起&#xff0c;它们基于广泛的数据集进行训练&#xff0c;正在彻底改变人工智能领域的面貌。例如SAM、DALL-E2和GPT-4这样的模型通过提取复杂的模式&#xff0c;并在不同任务中有效地执行&#xff0c;从…

1 认识微服务

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff1a;将业务的所有…

Checklist系列:MySQL自检五十五问,万字整理,推荐收藏

&#x1f680;最近也打算整理一波已经学过的知识&#xff0c;名字已经想好了就叫《CheckList》系列&#xff0c;以后需要用到的时候也可以拿出来看。问题来源于网上常见的面试题&#xff0c;问题的答案多以官网为主&#xff0c;每个问题我都贴了链接&#xff0c;觉得我写的不清…

Flink中的容错机制

一.容错机制 在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 1.1 检查点&#xff08;Checkpoint&#xff09; 在流处理中&#xff0c;我们可以用存档读档的思路&#xff0c;将之前某个时间点的所有状态保存下来&#xf…

世微AP2915宽电压无MOS管切换双色灯性价比方案

1&#xff1a;产品描述 AP2915 是一款可以一路灯串切换两路灯串的降压恒流驱动器,高效率、外围简单、内置功率管&#xff0c;适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出功率可达 12W&#xff0c;电流 1.2A。AP2915 一路灯亮切换两路灯亮&#xff0c;其…