selenium实战记录-base、page、script等-分层思想

发布时间:2026/8/30 7:21:39

selenium实战记录-base、page、script等-分层思想
介绍po模式页面对象模型Page Object Model他的核心思想分层分层页面分为三层包括对象库层、操作层、业务层对象库层封装定位元素的方法。操作层封装对元素的操作。业务层将一个或多个操作组合起来完成一个业务功能。比如登录需要输入帐号、密码、点击登录三个操作几个页面就几个.py文件每个文件都是分三层三个类用例也需要单独存放文件夹编程思想分类归纳scripts脚本、page页面、base页面基类、report报告、pytest.ini配配置文件、utils第三方工具类项目结构样式projectName #项目名称├── base #封装PO基类├── page #封装PO页面对象├── scripts #定义测试用例脚本├── data #存放测试数据├── report #存放生成的测试报告├── log #存放日志文件├── img #存放截图├── config.py#定义项目的配置信息├── utils.py #定义工具类├──pytest.ini #pytest配置文件├── utils.py #定义工具类└──conftest.py #不用写任何代码放在项目的根目录所有测试文件都能读取它日志处理1、定义config文件放入日志初始化函数importloggingimportosfromloggingimporthandlers#获取当前文件路径BaseDiros.path.dirname(__file__)deflog_config():#日志器loggerlogging.getLogger()logger.setLevel(logging.INFO)#处理器c_handlelogging.StreamHandler()c_handle.setLevel(logging.INFO)filenameBaseDir/log/logtest.logf_handlelogging.handlers.TimedRotatingFileHandler(filenamefilename,whenM,interval30,backupCount3)#格式器fmt%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)sformattorlogging.Formatter(fmtfmt)#将格式器添加到处理器f_handle.setFormatter(formattor)c_handle.setFormatter(formattor)#将处理器添加到日志器logger.addHandler(c_handle)logger.addHandler(f_handle)2、日志调用放到base目录下的init文件中importconfig config.log_config()utils1、工具类如web页面建立连接、关闭连接等方法封装定义工具类fromseleniumimportwebdriverimporttime#获取弹出的信息defget_msg():time.sleep(1)returnUtilsDriver.get_driver().find_element_by_css_selector(.el-message).textclassUtilsDriver:_driverNone# 定义一个获取浏览器驱动对象的方法# 表示这个方法是一个类级别的方法,调用不需要实例化classmethoddefget_driver(cls):ifcls._driverisNone:#判断是否为空为空则创建webdriver对象cls._driverwebdriver.Chrome()cls._driver.maximize_window()cls._driver.implicitly_wait(10)returncls._driver# 定义一个退出浏览器驱动对象的方法 浏览器驱动对象退出之后还有一串效的字符串存在classmethoddefquit_driver(cls):ifcls._driverisnotNone:cls._driver.quit()cls._driverNonebase1、封装基础类页面对象类的基类2、包括对象库层、操作类封装通用方法以及类如对象库层封装定位元素方法操作层定义输入文本方法。–通用方法封装fromselenium.webdriver.support.waitimportWebDriverWaitfromutilsimportUtilsDriver#对象库层基类封装classBasePage:def__init__(self):self.driverUtilsDriver.get_driver()defget_element(self,location):waitWebDriverWait(self.driver,10,1)elementwait.until(lambdax:x.find_element(*location))returnelementclassBaseHandle:definput_text(self,element,text):element.clear()element.send_keys(text)page1、页面对象类一个也没一个文件如登陆也没、客户列表页面、客户添加页面等2、三层模式包括对象库层、操作类、业务类通用方法调用base类#后台登陆页面对象fromselenium.webdriver.common.byimportByfrombase.baseimportBasePagefrombase.baseimportBaseHandle#定义对象库层classLoginPage(BasePage):def__init__(self):super().__init__()#继承基类的初始化方法自带驱动#初始化账号密码登陆按钮元素self.enterpriseBy.XPATH,//*[placeholder请输入企业号]self.accountBy.XPATH,//*[placeholder请输入用户名]self.psdBy.XPATH,//*[placeholder请输入密码]self.login_btnBy.CSS_SELECTOR,.el-button#定位企业号、用户名、密码、登陆按钮元素deffind_enterprise(self):returnself.get_element(self.enterprise)deffind_account(self):returnself.get_element(self.account)deffind_psd(self):returnself.get_element(self.psd)deffind_login_btn(self):returnself.get_element(self.login_btn)#定义操作层classLoginHandle(BaseHandle):def__init__(self):self.login_pageLoginPage()#实例化元素对象类#定义账号密码输入框definput_enterprise(self,enterprise):self.input_text(self.login_page.find_enterprise(),enterprise)definput_account(self,account):self.input_text(self.login_page.find_account(),account)definput_psd(self,psd):self.input_text(self.login_page.find_psd(),psd)defclick_login_btn(self):self.login_page.find_login_btn().click()#定义业务层classLoginProxy:#实例化操作层类def__init__(self):self.login_handleLoginHandle()#点击登陆跳转到home页面defgo_home_page(self,enterprise,account,psd):#输入账号密码点击登陆self.login_handle.input_enterprise(enterprise)self.login_handle.input_account(account)self.login_handle.input_psd(psd)self.login_handle.click_login_btn()scripts1、测试脚本测试用例需要导入pytest库第三方工具库等fromutilsimportget_msg,UtilsDriverimportpytest#定义测试类classTestLogin:#初始化。类级别的defsetup_class(self):self.driverUtilsDriver.get_driver()#调用工具类的方法创建web对象self.urlhttps://yxf.xinproptech.com/admin-tenant/#/loginself.driver.get(urlself.url)#刷新,方法级别每次调用方法用例重新刷新页面defsetup(self):self.driver.refresh()#结束销毁类级别统一销毁defteardown_class(self):UtilsDriver.quit_driver()#调用工具类中的关闭webdriver对象#账号为空pytest.mark.lastdeftest_login_01(self):#输入账号self.driver.find_element_by_xpath((//*[classel-input__inner])[1]).send_keys( )self.driver.find_element_by_xpath((//*[classel-input__inner])[2]).send_keys(ydhl)self.driver.find_element_by_xpath((//*[classel-input__inner])[3]).send_keys(ydhl123)#点击登陆self.driver.find_element_by_css_selector(.el-button).click()#获取提示信息msgget_msg()#调用工具类的get_msg方法#断言提示信息是否符合预期assert账号不存在inmsgpytest.ini1、pytest配置文件.ini文件运行命令、html报告配置、失败重试配置等。包括测试脚本路径、测试文件名称、类名称、方法名称等配置[pytest] addopts -s -v -p no:warning --htmlreport/report.html --reruns 1 --capturetee-sys test_paths./scripts test_filestest_*.py test_classesTest* test_functionstest_*conftest.py1、不用写任何代码放在项目的根目录所有测试文件都能读取它。data1、存放测试数据如参数化时使用的测试数据log1、存放日志记录脚本执行过程中产生的日志记录。img1、测试过程中产生的图片如测试过程中遇到bug截图这样可以定位bug。运行1、terminal中输入pytest即可测试报告1、html测试报告

相关新闻

AI Agent技能扩展:Skills与MCP的核心区别与选型指南

AI Agent技能扩展:Skills与MCP的核心区别与选型指南

2026/8/30 7:21:39

最近很多做 AI Agent 的同学都在讨论一个话题: Skills 和 MCP 到底有什么区别?什么时候该用 Skills ,什么时候该接 MCP ?社区里相关的帖子非常多,但大部分介绍都比较零散。有些朋友甚至产生了一个错觉&#xf…

TVA-World生成式具身智能:概念、原理、应用(3)

TVA-World生成式具身智能:概念、原理、应用(3)

2026/8/30 7:11:39

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术体系。它有机融合深度强化学习(DRL)、卷积…

AI办公技术拆解:从大模型到RAG与Agent的落地实践

AI办公技术拆解:从大模型到RAG与Agent的落地实践

2026/8/30 7:11:39

最近 AI 办公的话题又热了起来。起因也很好理解:腾讯、字节、阿里这几家互联网大厂几乎在同一时间点加大了 AI 办公赛道的投入,加上各类 AI 办公平台、智能助手、AI 表格、AI 文档工具的集中爆发,让不少人开始关注一个核心问题:当…

Awesome Claude Code 资源列表 3 步自动更新指南:CSV 如何驱动整份 README

Awesome Claude Code 资源列表 3 步自动更新指南:CSV 如何驱动整份 README

2026/8/30 8:41:44

Awesome Claude Code 资源列表 3 步自动更新指南:CSV 如何驱动整份 README 【免费下载链接】awesome-claude-code A hand-picked collection of the finest of resources for the most awesome of agents, Claude Code, the undisputed champion of coding companio…

TS-RAG:用检索增强生成破解时间序列预测难题

TS-RAG:用检索增强生成破解时间序列预测难题

2026/8/30 8:41:44

时序预测场景里,最难受的问题不是模型不够强,而是“同样的模式换个时间窗口出现时,模型好像完全不认识”。尤其是冷启动、长周期预测、突发事件后的表现,往往靠单一模型硬扛。近一年,检索增强生成(Retrieva…

NVIDIA开源srt-slurm:让SLURM集群上的AI推理与训练编排更简单

NVIDIA开源srt-slurm:让SLURM集群上的AI推理与训练编排更简单

2026/8/30 8:41:44

这次我们来看一个 NVIDIA 开源的 SLURM 编排项目:srt-slurm。它解决的问题很具体:在 SLURM 集群上跑 AI 推理或分布式训练任务时,不要再每次手写一长串srun/sbatch参数,也不要再头疼多节点资源分配、GPU 请求、日志收集和批量任务…

把5000张手机照片搬进本地相册:Jellyfin照片管理上手笔记

把5000张手机照片搬进本地相册:Jellyfin照片管理上手笔记

2026/8/30 8:41:44

把5000张手机照片搬进本地相册:Jellyfin照片管理上手笔记 【免费下载链接】jellyfin The Free Software Media System - Server Backend & API 项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin 上次把手机相册同步到云端后,我发现…

CASS 11.0安装与影像不显示排查:CAD版本匹配是关键

CASS 11.0安装与影像不显示排查:CAD版本匹配是关键

2026/8/30 8:31:44

如果只看安装过程的表象,CASS 11.0 和普通 Windows 软件没有太大区别:解压安装包、运行 Setup、一直点“下一步”。但在实际安装工作中,真正让测绘人员头疼的,往往是那些不会出现在安装向导里的问题:CAD 版本匹配不对、…

贝叶斯AI崛起?深度学习工程师该多带一件救生衣

贝叶斯AI崛起?深度学习工程师该多带一件救生衣

2026/8/30 8:31:44

最近我常被一个问题问住:如果贝叶斯AI真的成为下一代AI底座,那些像Jeff Dean一样靠深度学习规模化经验站到塔尖的人,是不是应该提前跳船? 这个标题看多了挺容易让人焦虑,但它并不是一个刚发生的事实,更像是…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/8/30 0:01:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/30 0:01:07

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/30 0:01:07

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/8/30 0:01:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/30 0:01:07

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/30 0:01:07

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…