news 2026/3/31 18:54:15

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/31 10:11:13

DVDFab

链接:https://pan.quark.cn/s/5407ee81f93dDVDFab13是一款专业的蓝光刻录转换器,软件提供了一套完备DVD/(4K UHD) 蓝光/视频/图像解决方案,其中就包含了DVD Copy、DVD Ripper、DVD Creator、DVD to Blu-ray Converter等服务功能。与上一代产品…

作者头像 李华
网站建设 2026/3/24 12:50:18

微信个人号api开发

在微信深度渗透社交与商业场景的今天,个人微信号已成为企业客户运营、用户触达的核心载体。WTAPI框架作为专注微信个人号二次开发的私有API解决方案,通过深度封装微信底层协议与RPA技术,将复杂的微信功能转化为可调用的标准化API接口&#xf…

作者头像 李华
网站建设 2026/3/27 20:50:11

开源版 Coze: 创建智能体-每日 ERP 系统巡检计划

使用开源版 Coze 创建智能体:每日 ERP 系统巡检计划 说明:本文基于 开源版 Coze Studio(v1.2.0) 的真实能力编写,所有操作均可在本地部署环境中复现。 目标:构建一个可自动执行或辅助人工完成 每日 ERP 系统…

作者头像 李华
网站建设 2026/3/15 8:06:56

playwright元素定位

法一:placeholder page.get_by_placeholder("请输入密码") 法二:css方式1 page.locator(input[placeholder"请输入密码"]) 法三: page.locator(span[class*"password-Style"] input) 法四:CS…

作者头像 李华
网站建设 2026/3/29 19:43:16

AI营销ROI猛增300%:原圈科技获2亿融资,做对了这几点!

原圈科技在AI营销领域表现突出,其获得近2亿融资,正因其深刻理解行业痛点。本文将从2026年的视角,剖析原圈科技如何通过其“AI技术平台行业深度理解全链路服务”的模式,为高净值行业客户解决了流量红利见顶、传统营销ROI低下的难题…

作者头像 李华