什么是自动化测试po模式,po分层如何实现?
一、什么是PO模式
全称:page object model 简称:POM/PO
PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性!

主要分三层:
1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。
2.PO层:元素定位、获得元素对象,页面动作
3.测试用例层:业务逻辑,数据驱动!
三者的关系:PO层继承继承层,测试用例层调用PO层!
二、什么是自动化测试框架

说到自动化框架,我相信很多人应该都听过这个词,但是不知其到底是个什么东西,为什么要用自动化框架。有很多人堆自动化框架都是懵懵懂懂,就跟谈恋爱一样,朦胧美!
一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的,
一个好的自动化测试框架可以减少自动化测试中脚本管理和维护当中的人力物力和财力。
其实自动化框架的一个最大的意义在于可重用性。因为在框架里,你可以实现很多的通用功能来简化整个脚本的开发过程。并且生成美观的测试报告。
三、非PO模式和PO模式优缺点对比

四、如何从0到1搭建PO模型
非PO模式举个栗子:有如下百度搜索脚本:
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import Byclass Test(unittest.TestCase):def test01(self):# 打开浏览器driver = webdriver.Chrome()# 加载百度首页driver.get('http://www.baidu.com')# 在百度搜索栏中输入软件测试driver.find_element(By.ID, 'kw').send_keys('软件测试')# 点击百度一下按钮driver.find_element(By.ID, 'su').click()def test02(self):# 打开浏览器driver = webdriver.Chrome()# 加载百度首页driver.get('http://www.baidu.com')# 在百度搜索栏中输入软件测试driver.find_element(By.ID, 'kw').send_keys('硬件测试')# 点击百度一下按钮driver.find_element(By.ID, 'su').click()
如何把上述栗子改成PO模式呢?
1、基础层BasePage
from selenium import webdriverclass BasePage:#构造方法def __init__(self):# 打开浏览器self.driver = webdriver.Chrome() # Alt+Enter# 加载百度首页self.driver.get('http://www.baidu.com')#封装定位元素def find_ele(self,*args):ele = self.driver.find_element(*args)return ele
2、PO层:封装百度页面元素定位,元素对象以及页面操作
from selenium.webdriver.common.by import By
from base.base_page import BasePageclass BaiduPage(BasePage):#元素定位,baidu_text_loc = (By.ID, 'kw')baidu_submit_loc = (By.ID, 'su')#获得元素对象,def get_text_obj(self):ele = self.find_ele(*BaiduPage.baidu_text_loc)return eledef get_submit_obj(self):ele = self.find_ele(*BaiduPage.baidu_submit_loc)return ele#页面操作def search(self,search_string):self.get_text_obj().send_keys(search_string)self.get_submit_obj().click()
3、测试用例层:业务逻辑和数据驱动
from ddt import ddt, data
from po.baidu_page import BaiduPage@ddt
class BaiduTest(unittest.TestCase):@data('软件测试','硬件测试')def test01(self,seaString):BaiduPage().search(seaString)time.sleep(5)if __name__ == '__main__':unittest.main()
从上面的PO案例:让我们更加了解清晰PO的优点在于:
1.POM把页面元素定位和业务操作流程分开。实现松耦合。
2.UI元素的改变不需要修改业务逻辑代码。只需要找到对应的PO页修改定位即可,数据代码分离
3.PO能使我们的测试代码提高代码的可读性,高复用性,可维护性。
五、自动化测试框架和PO的关系
自动化框架=po+各种封装(日志处理封装,全局配置文件的封装,数据库连接的封装,excel操作封装,数据驱动封装等)
其实想要胜任UI自动化测试岗位还需要掌握以下内容:
1.python或java
2.selenium的API
3.unittest/pytest单元测试框架
4.htmltestrunner/allure测试报告
5.数据驱动dtt(excel,yaml,mysql)或pytest中的fixtrue
6.关键字驱动:公共类,方法封装,随机数,数据库连接,全局登录
7.全局配置文件处理
8.日志处理
9.断言
10.第三方库
11.git和github或码云集成开发!
12.jenkins持续集成
这些内容在我的CSDN博客当中基本都有涉猎,大家需要什么就去搜索什么吧!
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。
相关文章:
什么是自动化测试po模式,po分层如何实现?
一、什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePage:封装一些最基…...
Redis-缓存高可用集群
Redis集群方案比较 哨兵模式 性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况。另外哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过…...
Docker的入门
Docker的入门 防火墙Docker的命令镜像相关的命令运行容器容器相关的命令 Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。 docker有3大核心…...
AJAX技术-04-- 跨域说明
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1 同源策略同源策略介绍规定要求 请求协议://域名:端口号 关于同源策略练习关于同源策略总结 2.JSONPJSONP原理说明关于JSONP优化 3.CORS介绍介绍不允许跨域说明跨域…...
蓝桥杯每日一题2023.11.23
题目描述 题目分析 本题使用递归模拟即可,将每一个大格子都可以拆分看成几个小格子,先将最开始的数字进行填入,使每一个对应小格子的值都为大格子对应的数,搜索找到符合要求的即可 (答案:50 33 30 41&am…...
20231124给RK3399的挖掘机开发板在Andorid10下加鼠标右键返回
20231124给RK3399的挖掘机开发板在Andorid10下加鼠标右键返回 2023/11/24 12:19 百度:RK3399 Android10 右键返回 https://blog.csdn.net/danhu/article/details/122467256 android9/android10 鼠标右键返回(已验证) danhu 于 2022-01-13 09:46:42 发布 android10 …...
云计算实验如何结合AI来提高效率!
随着AI助手的流行,我们现在无论是学习还是工作都会带着一个他/她,如何让AI助手提高我们的工作效率是我们需要进化的方向。下面结合“云计算实验”来分享一下如何让AI帮助我们学得更快学得更好。 一、学习某个软件或复杂命令 比如在学习RockyLinux9.2中…...
前端路由hash和history的六大区别
前端路由hash和history的区别 前言谁的URL有#回车刷新时hash和history变化 谁支持低版本浏览器hash不会重新加载页面谁有历史记录谁需要后台配置hash缺点 前言 本文主要讲解hash和history路由的区别,那么好本文正式开始。 谁的URL有# 路由Hash的地址上有#,而hist…...
解决多选删除页面不同步问题
多选删除一般有两种情况: 1,删除接口支持传多个id,这是最理想的方法,建议大家积极与后端进行沟通解决。之后只需要判断接口回调刷新页面即可! 2,删除接口不支持传多个id,这就是接下来我们要处…...
QQ空间上传一次 500张限制突破记录
手机又好多照片了,用手机上传耽误时间,就导出到电脑了,上传到qq空间去。 结果发现不开通黄钻无法上传原图,那就开通吧! 开通了黄钻,居然不能一次上传超过 500 张,开通有何用? 五千…...
springboot3.x+springsecurity6.x多种方式登录验证
最新的 Spring Security 5.7 及以上版本,更新了不少内容,之前的 WebSecurityConfigurerAdapter 已经被废弃了,而且,要同时实现用户名密码登录、手机验证码登录、邮箱、微信小程序等登录方式,跟之前的配置方式都会有所不…...
【数据结构实验】图(二)将邻接矩阵存储转换为邻接表存储
文章目录 1. 引言2. 邻接表表示图的原理2.0 图的基础知识a. 类型b. 表示 2.1 有向权图2.2 无向权图2.3 无向非权图2.4 有向非权图 3. 实验内容3.1 实验题目(一)数据结构要求(二)输入要求(三)输出要求 3.2 算…...
【LeetCode】挑战100天 Day15(热题+面试经典150题)
【LeetCode】挑战100天 Day15(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&…...
面试:RabbitMQ相关问题
文章目录 简单介绍RabbitMQRabbitMQ架构什么是 RabbitMQ?有什么显著的特点?RabbitMQ 有那些基本概念?RabbitMQ routing 路由模式消息怎么路由?RabbitMQ publish/subscribe 发布订阅(共享资源)能够在地理上分开的不同数据中心使用 …...
SpringMVC系列-7 @CrossOrigin注解与跨域问题
背景 前段时间帮同事分析了一个跨域问题,正好系统分析和整理一下。 1.跨域 理解同源策略是理解跨域的前提。同源策略定义如下: 在同一来源的页面和脚本之间进行数据交互时,浏览器会默认允许操作,而不会造成跨站脚本攻击&#x…...
[RK-Linux] misc分区详解
misc 其实是英文 miscellaneous 的前四个字母,杂项、混合体、大杂烩的意思。 misc 分区的概念来源于 Android 系统,Linux 系统中常用来作为系统升级时或者恢复出厂设置时使用。 misc 分区的读写:misc 分区在以下情况下会被读写。 Uboot:设备加电启动时,首先启动 Uboot,…...
用户与组管理:如何在服务器系统中管理用户和权限
你是否想过,当你登录到一个服务器系统时,你是如何被识别和授权的?你是否知道,你可以通过创建和管理用户和组来简化和优化你的系统管理工作?你是否想了解一些常用的用户和组管理命令和技巧?如果你的答案是肯…...
【负载均衡】这些内容你需要知道下
😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…...
深入理解 Django 中的事务管理
概要 在数据库操作中,事务是确保数据完整性和一致性的关键机制。Django 作为一个强大的 Python Web 框架,提供了灵活而强大的事务管理功能。理解和正确使用 Django 中的事务对于开发高质量的 Web 应用至关重要。本文将深入探讨 Django 的事务管理机制&a…...
springsecurity6配置一
springsecurity6默认的过滤器是UsernamePasswordAuthenticationToken。具体操作步骤如下: 一、定义一个实体实现springsecurity的UserDetails接口 package com.school.information.core.security.entity;import com.alibaba.fastjson.annotation.JSONField; import com.scho…...
Path of Building终极指南:流放之路离线构建规划器深度解析
Path of Building终极指南:流放之路离线构建规划器深度解析 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding Path of Building(简称PoB)…...
嵌入式——小白入门
嵌入式小白入门嵌入式一、先搞懂:什么是嵌入式?核心思想1. 通俗定义2. 嵌入式核心三大思想(入门最重要)二、嵌入式整体分类(小白快速分清)1. 单片机嵌入式(MCU)——入门首选、最简单…...
掌握开源电路板查看器实用技巧:从零开始的高效使用指南
掌握开源电路板查看器实用技巧:从零开始的高效使用指南 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView OpenBoardView是一款专业的开源电路板文件查看工具,专为电子工程师、硬件维修…...
使用openclaw获取微信公众号文章详情详细过程记录 获取公众号文章标题 作者 正文内容
目录 背景 过程 结果 背景 我有一个对公众号改写的服务已经上线,上线后发现获取文章详情经常被微信风控,一天甚至会出现两次无法获取微信公众号文章的情况,于是我就想办法优化,openclaw装了一个多月了,终于该他上场…...
构建高性能HDF5数据可视化架构:ViTables模块化设计指南
构建高性能HDF5数据可视化架构:ViTables模块化设计指南 【免费下载链接】ViTables ViTables, a GUI for PyTables 项目地址: https://gitcode.com/gh_mirrors/vi/ViTables 在科学计算和大数据时代,HDF5格式已成为存储复杂结构化数据的行业标准&am…...
数字员工:不同场景下的落地案例全景
数字员工:不同场景下的落地案例全景 数字员工正在从概念走向规模化落地,覆盖制造、金融、零售、人力、客服等多个行业。以下是2025-2026年各领域真实应用案例的详细拆解。 一、供应链与制造场景 1. 壹沓科技:供应链物流AI Agent 企业背景&…...
别再死记硬背了!用这5个真实业务场景彻底搞懂Flink Watermark与状态管理
别再死记硬背了!用这5个真实业务场景彻底搞懂Flink Watermark与状态管理 最近在技术社区看到不少开发者抱怨Flink的状态管理和时间语义太难理解——文档里的概念像"Watermark"、"Checkpoint"、"Keyed State"看着都认识,一…...
别再乱初始化了!PyTorch中nn.init的11种方法到底怎么选?附实战避坑指南
PyTorch权重初始化实战指南:从理论到调优技巧 刚接触PyTorch时,我曾在模型训练中反复遇到一个奇怪现象——相同的网络结构,有时能快速收敛,有时却完全无法学习。直到某次调试时打印了第一层的权重分布,才发现问题根源…...
全网独家自带Uniapp的CRM源码:一套代码编译微信小程序+H5,移动办公零门槛
温馨提示:文末有资源获取方式为什么你的销售团队需要这样一套CRM系统?在移动办公成为常态的今天,企业销售管理面临三个痛点:客户跟进记录分散,团队协作效率低电脑端系统无法满足外勤办公需求小程序和H5需要分别开发&am…...
设计租房收支智能监管模拟计算器,登记房东租金流水,自动核算涉税基准金额,展示租客房东收支合规对账明细。
一、实际应用场景描述场景设定:你是一名代账会计 / 住房租赁平台的风控人员,负责监管多个房源的租金流水。典型流程:1. 出租签约- 房东 A 将房屋出租给租客 B- 月租金 6000 元,押一付三2. 资金流动- 租客支付租金- 平台/管家代收代…...
