8年测试老鸟,Python Selenium自动化测试-POM分层封装框架(超全整理)

news2024/9/22 20:29:48

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

1、POM模式是什么

页面对象模型(POM)是一种设计模式,用来管理维护一组web元素集的对象库

在POM模式下,应用程序的每一个页面都有一个对的page class

每一个page class维护着该web页的元素集合操作这些元素的方法

page class中的方法名最好根据业务场景进行

POM模式的代码目录组织示例:

在这里插入图片描述

2、 POM的优势

POM提供了一种在UI层操作、业务流程与验证分离的模式,这使得测试代码变得更加清晰和高可读性

对象库与用例分离,使得我们更好的复用对象,甚至能与不同的工具进行深度结合应用
可复用的页面方法代码会变得更加优化

更加有效的命名方式使得我们更加清晰的知道方法所操作的UI元素。例如我们要回到首页,方法名命名为: gotoHomePage(),通过方法名即可清晰的知道具体的功能实现。

可以理解POM模式是一种底层、逻辑、用例的分层。

3、POM分层封装

1)driver层的封装(最底层的封装base)

这一层主要是对于webdriver方法的封装,这里来举一个栗子,最常用的定位方法,使用find_element()方法通过BY类、字符串、元组三种方法传递定位类型和数据,这里我使用元组的形式(例如locator = (“id”,“name_box”))来传递参数

定位元素方法封装:

这个定位元素的公共方法中,加了很多东西;如果每次定位的时候写这些异常捕获、打印操作的话,那么程序会非常臃肿,所以需要单独提出来,每次需要定位的时候统一调用这个方法。

有一个入参locator,格式为(‘定位类型’,‘定位参数值’),返回我们所定位到的元素;
加入了元素等待,并判断该元素是否存在;
对关键信息的打印输出,方便定位监控;
加入了异常捕获,定位失败后可以继续执行程序;

def findElementNew(self, locator):
    '''定位到元素返回元素对象,没定位到,返回timeout异常'''
    # isinstance() 函数来判断一个对象是否是一个已知的类型
    if not isinstance(locator, tuple):
        print('locator参数类型错误,必须是元祖类型:loc=("id", "value")')
    else:
        try:
            print("正在定位元素信息:定位方式->%s, value值->%s" % (locator[0], locator[1]))
            ele = WebDriverWait(self.driver, self.timeout, self.t).until(EC.presence_of_element_located(locator))
            return ele
        except:
            return []

封装类的初始化:

对于webdriver的封装,我们要先创建一个class,这样方便我们继承调用这些封装的方法。在class中,我这里设计了一个初始化,每次调用封装的driver时,传递参数,一个必填项:driver,我这样的想法是每次引用这个封装类时,传递一个driver进来

def __init__(self, driver):
       self.driver = driver
       self.driver.maximize_window()  

2)page层封装

page类在继承我们封装的webdriver后,主要写具体的操作步骤,例如输入登录名、输入登录密码、点击登录按钮等操作。

继承driver类
操作步骤书写

class LoginPage(Base): #继承
    # 定位登录
    loc_user = ('id', 'account')
    loc_psw = ('css selector', '[name="password"]')
    loc_button = ('xpath', '//*[@id="submit"]')
 
    loc_get_user = ('css selector', '#userMenu>a')
    loc_forget_psw_page = ('xpath', '/html/body/div/div/div[2]/p/a')
 
    def input_user(self, text=''):
        self.sendKeys(self.loc_user, text)
 
    def input_psw(self, text=''):
        self.sendKeys(self.loc_psw, text)
 
    def click_login_button(self):
        self.click(self.loc_button) 

3)case层调用

终于到了第三层,这里我们要做的就是把page层的方法,像搭积木一样搭起来,并且连成完整的操作。

使用unittest/Pytest,并初始化数据:

在unittest/Pytest框架的基础上,主要是在setUp()方法中初始化我们的数据,例如网址、账号、driver的初始化。

调用方法,完成用例:

首先引用page层,然后使用page层的方法搭建case。

4、POM模型的核心要素

抽象封装一个BasePage基类,基类应该拥有一个指向webdriver实例的属性

每一个Page都应该继承BasePage,并通过driver来管理本Page的元素,且将Page才操作都封装成一个个的方法

TestCase应该继成unittest.Testcase类,并依赖相应的Page类来实现相应的test step(即测试步骤)

目录框架文件作用

在这里插入图片描述

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

生命的价值在于奋斗,只有通过不断的挑战和努力,我们才能实现自我价值,才能在人生的舞台上留下深深的脚印。让我们以坚定的信念和不屈的精神,迎接每一个挑战。

每个人都是自己命运的舵手,只有紧握生活的舵,才能驶向理想的彼岸。无论前方风浪多大,只要我们坚持不懈的奋斗,就能在生活的大海中破浪前行,创造出属于自己的辉煌人生。

无论你现在处于什么位置,都不应放弃努力和追求。记住,每一次的挫折都是对你意志的考验,每一次的困难都是通向成功的垫脚石。只有坚持不懈的奋斗,才能实现自己的梦想。

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

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

相关文章

【JAVA学习笔记】41 - 接口

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/interface_ 一、快速入门 usb插槽就是现实中的接口。你可以把手机,相机,u盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的&#x…

【广州华锐视点】VR塔吊模拟实操考核系统

随着科技的不断发展,虚拟现实技术已经逐渐渗透到各个领域,为人们带来了全新的体验。在建筑行业中,塔吊作为一种重要的起重设备,其拆装作业的安全与否直接关系到工程质量和人员生命安全。为了提高塔吊拆装作业的安全性和效率&#…

VUE3中 reacitive源码理解

Proxy 在Vue里面定义一个响应式函数 reacitive 会通过 Proxy 进行拦截,在截的时候里面有ge和set track get的时候有一个跟踪函数叫 track track里面会收集各种依赖,把依赖关系做成各种映射的关系,映射关系就叫 targetMap,vue内部拿…

ES6初步了解Map对象(含十种方法)

ES6提供了 Map数据结构。它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。 创建方法 let m new Map()console.log(m)Map的方法 1.set( ) 添加元素 接收两个参数&#xff0c…

使用香橙派并基于Linux实现最终版智能垃圾桶项目 --- 下

最终完成效果视频: 使用香橙派并基于Linux实现最终版带图像识别的可回收垃圾桶 — 下_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1bc411o7zS/?spm_id_from333.999.0.0&vd_source16380169fa415d2d056dd877a8d8c1b7 硬件接线 & 最终实现图 目录 …

智能振弦传感器:参数智能识别技术的重要科技创新

智能振弦传感器:参数智能识别技术的重要科技创新 智能振弦传感器是一种能够自动识别传感器参数的高科技产品。它的研发得益于河北稳控科技的不断创新和努力,其电子标签专用读数模块模块TR01将传感器生产和标定过程实现了自动化。该模块将温度电阻两芯线…

单片机中的 _nop_() 延时以及其相关的基础扩展

使用 _nop_() 函数做延时遇到的一些问题 以及对此延伸出的一些需要了解的基本概念 ...... by 矜辰所致 完善文章内容结构,补充指令周期、机器周期等一些基本概念 2023/10/25前言 最近还是继续做着项目,因为在某 8051 内核芯片上使用到了 I…

Windows隐藏计划任务技术

Windows隐藏计划任务技术 0x00 前置知识 计划任务SCHTASKS命令 SCHTASKSSCHTASKS /Create 参数 SCHTASKS /Create [/S system [/U username [/P [password]]]][/RU username [/RP password]] /SC schedule [/MO modifier] [/D day][/M months] [/I idletime] /TN taskname …

手写SDK的秘诀

目录 什么是SDK?使用SDK的好处?手写SDK经验总结易用性如何提高易用性?1、统一调用2、集中配置3、良好的命名 可理解性1、结构清晰2、统一风格3、编写注释4、说明文档 可扩展性轻量依赖自定义实现 高效稳定 写在最后 什么是SDK? SDK(Softwa…

记一次大型微服务项目本地打包迁移部署

记一次大型微服务项目本地打包迁移部署 引代码合并发布过程本地部署服务配置服务打包自启动测试外部依赖排除部分外部依赖 引 服务的运维也是一个挺复杂工作,如项目上线后的一次小版本发布,开发人员需要基于工程最新代码拉取feature分支,本地…

CPU性能优化——“瑞士军刀“

背景 最近在做一些工具的预研工作,会涉及到对工具的压力测试,分析工具的资源消耗等问题,其中CPU 资源消耗是关键指标之一。为了后续性能优化做准备,回顾了以前相关CPU优化知识,并做总结分享。希望能帮助到正在遇到相关…

如何为3D模型设置自发光材质?

1、自发光贴图的原理 自发光贴图是一种纹理贴图,用于模拟物体自发光的效果。其原理基于光的发射和反射过程。 在真实世界中,物体自发光通常是由于其本身具有能够产生光的属性,如荧光物质、发光材料或光源本身。为了在计算机图形中模拟这种效…

Zabbix出现 404Not FoundThe requested URL /zabbix was not found on this server.

目录 一、问题: 二、原因: 三、解决方法: 一、问题: Not Found The requested URL /zabbix was not found on this server. 二、原因: 未找到 在此服务器上找不到请求的 URL /zabbix。 /etc/httpd/conf.d 目录…

AI是未来?——知识导航

AI是未来?——知识导航 文章目录 AI是未来?——知识导航一、问题记录:1. LoRA微调的原理?网络层是什么?2. P-tuning v2原理?3. 词嵌入,word embedding4. 下图含义?5. 过拟合6. loss定…

蓝桥杯双周赛算法心得——摆玩具(分段的差不计入结果)

大家好,我是晴天学长,这是一道可以牢记的数学技巧题。 1) .摆玩具 2) .算法思路 1.创建一个Scanner对象以从用户读取输入。 2.从用户读取n和k的值,分别表示数组的大小和k的值。 3.创建一个大小为n的整数数组a,用于存储输入的数…

C语言 sizeof 函数内部进行计算

直接看代码 #include <stdio.h> int main() {int i 2;int j;j sizeof(i i);printf("i %d, j %d", i ,j);return 0; }执行结果&#xff1a; 可以看到 i的值一直是没有变的&#xff0c; j 是int类型下 sizeof占用的大小为 4个字节&#xff0c;不是i的 22…

百看不厌的85M²现代极简装饰设计。福州中宅装饰,福州装修

简而不凡 设计&#xff0c;是美好生活的序章 每个人&#xff0c;对家都有不同的想法 但对未来美好新居的向往是相同的 ABOUT THE CASE 案例简介&#xff1a; 作品&#xff1a;尽兴 风格&#xff1a;极简 面积&#xff1a;82平方 户型&#xff1a;SOHO 本套案例85㎡的公…

程序员自我修养-思考度

① 自警 考虑太少&#xff0c;牵连少&#xff0c;深度欠缺&#xff0c;易造成浅尝辄止&#xff0c;贻笑大方&#xff1b; 考虑太多&#xff0c;纬度多&#xff0c;关系复杂&#xff0c;易造成画地为牢&#xff0c;寸步难行。 ② 自励 “一个人能同时保有全然相反的两种观念&…

使用示波器探头的一些技巧和注意事项

使用保护电阻。差分探头的引脚可能存在电压过高的风险&#xff0c;因此使用保护电阻可以有效避免引脚损坏。 接地方式的影响。不管单端信号还是差分信号的测量都对接地非常敏感&#xff0c;不同的接地方式可能会对测量结果产生影响。 校准差分探头。定期校准差分探头可以确保…

16结构型模式-组合模式

我们很容易将“组合模式”和“组合关系”搞混。组合模式最初只是用于解决树形结构的场景&#xff0c;更多的是处理对象组织结构之间的问题。而组合关系则是通过将不同对象封装起来完成一个统一功能. 1 组合模式介绍 将对象组合成树形结构以表示整个部分的层次结构.组合模式可…