news 2026/4/3 3:18:08

Pyhton中的POM思想

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pyhton中的POM思想
1.POM:页面对象模型,POM是近几年非常流行的自动化测试模型,或者思想,POM不是框架,是解决问题的一种思想2.采用POM目的:为了解决前端中UI变化频繁,从而造成测试自动化脚本维护的成本越来越大
3.自动化框架(Automation Framework)需要
1.配置文件管理(我选用ini文件)2.业务逻辑代码和测试脚本分离3.输出测试报告文件4.输出日志(log)文件5.自定义的库封装(有很多方法需要重复调用,例如浏览器的引擎以及basepage.py的封装)6.管理,执行脚本的方式(比如unittest框架 执行效率比较高)7.第三方插件引入(例:html第三方报告)

一.框架设计如下

1.配置文件:需要适用自己熟悉类型的文件来管理配置数据和全局变量2.框架的主要代码:主要包含日志类(log)自定义封装基类,配置文件读取类以及各种调度3.产品业务页面:页面对象,业务逻辑分层,分页独立出来4.测试脚本集合:考虑采用第三方框架和创建测试单元,例如unitest5.日志和报告:测试报告和日志的输出,报告需要采用第三方插件来实现6.邮件功能或者持续集成:例如Jenkins以及其他可以扩展的功能
7.POM思路:把页面元素和业务逻辑和测试脚本分离开到两个不同的类文件7.1.classA只写页面元素定位,和业务逻辑代码操作的封装,classB只写测试脚本7.2.不关心如何元素定位,只写调用classA的代码去覆盖不同的测试场景7.3.如果前端页发生变化,只需要修改ClassA的元素定位,而不需要去修改classB中的测试脚本代码

二.POM主要有以下优点

1.把web ui对象仓库从测试脚本分离,业务代码和测试脚本分离2.每一个页面对应一个页面类,页面的元素写到这个页面类中3.页面类主要包括该页面的元素定位,和这些元素相关的业务操作代码封装的方法4.代码复用,从而减少测试脚本代码量5.层次清晰,同时支持多个编写自动化脚本开发。例如:每个人写哪几个页面,不影响他人6.建议页面类和业务逻辑方法都给一个有意义的名称,方便他人快速编写脚本和维护脚本

三.PO模型分三层

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

四.BasePage基础层

# -*- coding: utf-8 -*-""" POM Page Object Model===页面对象模型,一句话解释,就是将页面封装成一个对象 """fromappium.webdriver.common.mobilebyimportMobileByclassPageObject:""" 将页面封装的元素全部放进来 定位元素的时候,实际上是通过页面元素的定位方式和定位的值来定位元素 所以在脚本里面,页面元素的代表者就是定位方式+定位的值 """city=(MobileBy.ACCESSIBILITY_ID,"书城")# 页面中“书城”这个元素book_list=(MobileBy.XPATH,'//*[@resource-id="com.zhao.myreader:id/rv_book_list"]/android.widget.LinearLayout')city_book_name=(MobileBy.ID,"com.zhao.myreader:id/tv_book_name")city_book_desc=(MobileBy.ID,"com.zhao.myreader:id/tv_book_desc")city_book_author=(MobileBy.ID,"com.zhao.myreader:id/tv_book_author")read_book=(MobileBy.ID,"com.zhao.myreader:id/btn_read_book")book_content=(MobileBy.ID,"com.zhao.myreader:id/tv_content")chapter_list=(MobileBy.ID,"com.zhao.myreader:id/ll_chapter_list")chapter_list_info=(MobileBy.XPATH,'//*[@resource-id="com.zhao.myreader:id/lv_chapter_list"]/android.widget.LinearLayout')

五.PO层

fromselenium.webdriver.common.byimportByfrombase.base_pageimportBasePageclassBaiduPage(BasePage):#元素定位baidu_text_loc=(By.ID,'kw')baidu_submit_loc=(By.ID,'su')#获得元素对象defget_text_obj(self):ele=self.find_ele(*BaiduPage.baidu_text_loc)returneledefget_submit_obj(self):ele=self.find_ele(*BaiduPage.baidu_submit_loc)returnele#页面操作defsearch(self,search_string):self.get_text_obj().send_keys(search_string)self.get_submit_obj().click()

六.测试用例层:业务逻辑和数据驱动

fromddtimportddt,datafrompo.baidu_pageimportBaiduPage@ddtclassBaiduTest(unittest.TestCase):@data('软件测试','硬件测试')deftest01(self,seaString):BaiduPage().search(seaString)time.sleep(5)if__name__=='__main__':unittest.main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/20 0:22:59

AI原生应用个性化定制:科技与人文的和谐统一

AI原生应用个性化定制:科技与人文的和谐统一关键词:AI原生应用、个性化定制、用户画像、推荐系统、情感计算、人机交互、人文关怀摘要:本文将带你走进AI原生应用的个性化定制世界,从技术原理到人文价值,一步步拆解“科…

作者头像 李华
网站建设 2026/3/26 20:24:34

DeepSeek处理敏感信息并生成结构化分析结果——以消防数据脱敏为例

摘要在数字化时代,数据已成为驱动决策、提升效率、保障安全的关键要素。消防领域作为守护人民生命财产安全的重要防线,其业务活动中产生了海量的数据,这些数据既蕴含着巨大的分析价值,也包含着高度敏感的个人隐私、地理位置、行动…

作者头像 李华
网站建设 2026/4/2 16:59:00

如何在 Linux 下搜索大文件和目录 ?

在 Linux 上,您可能希望查找占用太多空间的大文件或目录。本指南将向您展示如何使用终端命令搜索这些大文件和目录。 Using the du Command du(disk usage)命令用于检查文件和目录的大小。 要检查哪些目录占用最多的空间,请使用…

作者头像 李华
网站建设 2026/3/27 23:07:30

从PyTorch到MindSpore:一次高效易用的AI框架迁移体验

一、核心优势:动态图与静态图的完美融合 1.1 类似PyTorch的直观体验 import mindspore as ms from mindspore import nn, ops# 定义网络的方式与PyTorch高度相似 class SimpleCNN(nn.Cell):def __init__(self):super().__init__()self.conv1 nn.Conv2d(3, 64, 3)…

作者头像 李华
网站建设 2026/3/29 7:34:55

数据资产地图构建:文档安全可视化与主动防御

在数据要素市场化配置加速推进的背景下,企业文档作为核心非结构化数据资产,其安全治理面临 “看不见、管不住、防不住” 的三重困境。数据资产地图通过全域资产测绘、多维度可视化呈现与智能风险感知,为文档安全提供了从被动合规到主动防御的…

作者头像 李华
网站建设 2026/3/21 1:07:34

LoRA微调技术详解:让大模型高效适应特定任务的终极指南

本文详细介绍了LoRA(低秩适应)微调技术,一种参数高效的微调方法,通过注入可训练低秩矩阵使大模型适应特定任务而不修改大部分参数。文章解析了关键参数(如秩、学习率、目标模块等)、微调步骤、应用场景及过…

作者头像 李华