Selenium 自动化测试框架设计(POM)

Selenium基础 — POM设计模式(一) POM是页面对象模型的简称。POM是为Web UI元素创建的设计模式。在这个模型下,对于应用程序中的每个网页,应该有相应的页面类。此Page类将会找到该Web页面的,并且还包含对这些执行操作的页面方法。POM设计模式旨在为每个待测试的页面创建一个页面对象,将那些繁琐的定位操作封装到这个页面对象中,只对外提供必要的操作接口,是一种封装思想。白话总结:我们所做的自动化测试,就是模拟人在浏览器上的操作。 阅读详情

在这里插入图片描述
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。本文介绍selenium的框架设计。

自动化测试框架

1.什么是自动化测试框架

简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境。自动化测试框架能够提供很多便利给用户高效完成一些事情。

框架具有以下一些优点:

1)代码复用

2)最大覆盖率

3)很低成本维护

4)很少人工干预

5)简单报告输出

2.常见的测试框架分类

1)基于模块的测试框架

2)基于库(Library)结构测试框架

3)数据驱动测试框架,和QTP很像

4)关键字驱动测试框架,也是QTP过来的

5)混合测试框,3 4和综合

6)行为驱动开发测试框架

3.框架基本组件

1)需要配置文件管理

2)业务逻辑代码和测试脚本分离

3)报告和日志文件输出

4)自定义的库的封装

5)管理、执行脚本方式

6)第三方插件引入

7)持续集成

解释:

我们需要一个配置文件去控制一些,环境信息,开关,配置文件可以是txt/xml/yaml/properties/ini,一般.properties使用较多在JAVA里,本文是Python系列,我可能会选择ini文件。

业务逻辑代码和测试脚本分离,不像我们刚开始学习Selenium那样,代码和脚本在一个类文件里演示。我们根本没有用到代码重构,复用。代码和用例文件分离后,更加清晰,去多人开发脚本,方便调试。

报告和日志文件输出,你执行了多少case,case结果如何,这都需要报告来展示,一般采用第三方插件来实现这个功能,好多报告格式是html,简单,明了的风格。日志输出也很重要,如果发生报错,脚本执行失败,通过日志快速定位发生问题位置。

用户自定义库,这个很好理解,我们很多功能需要重复调用,这样我们就写成一个公用方法,放到工具包下,每次方便调用,例如浏览器引擎类和basepage.py的封装。

管理和执行脚本的方式,例如Python中单元测试框架unittest使用率非常高。

第三方插件,有时候,我们一些功能,需要借助第三方插件,能够更好实现,例如AutoIT,来实现文件上传和下载。还有利用第三方报告插件生成基于html格式的测试报告。

持续集成,git,svn,ant,maven,jenkins,我们会把这整合到jenkins,达到持续集成,一键执行测试脚本。

根据以上的特点介绍,我大致用以下图来描述一下,一个简单的自动化测试框架,可能包含哪些组成部分。

图片

unittest单元测试框架

unittest是一个单元测试框架,是Python编程的单元测试框架。

unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是test,也就是一个测试用例。要了解unittest单元测试框架,先来了解以下几个重要的概念。

测试固件(test fixture)

一个测试固件包括两部分,执行测试代码之前的准备部分和测试结束之后的清扫代码。这两部分一般用函数setUp()和tearDown()表示。这里举例以下,例如要测试百度搜索selenium这个场景,我们的测试固件可以这样写,setUp()里写打开浏览器,浏览器最大化,和打开百度首页等脚本代码;在tearDown()里写结束搜索后,退出并关闭浏览器的代码。

测试用例(test case)

unittest中管理的最小单元是测试用例,一个测试用例,包括测试固件,和具体测试业务的函数或者方法。一个测试用例中,测试固件可以不写,但是至少有一个已test开头的函数。unittest会自动化识别test开头的函数是测试代码,如果你写的函数不是test开头,unittest是不会执行这个函数里面的脚本的,这个千万要记住,所有的测试函数都要test开头,记住是小写的哦。

测试套件 (test suite)

很简单,就是很多测试用例的集合,叫测试套件,一个测试套件可以随意管理多个测试用例。如果测试用例比作单个学生,测试套件就是好像是班级的概念。

测试执行器 (test runner)

test runner是一个用来执行加载测试用例,并执行用例,且提供测试输出的一个组建。它可以加载test case或者test suite进行执行测试任务。

我们举例来,练习一下test fixture和test case的使用,学习unittest的简单用法:

  1. 新建一个testbaidu.py的文件

  2. 导入unittest模块

  3. 当前测试类继承unittest.TestCase,相当于当前利用unittest创建了一个test case,这个test case是能够被unittest直接识别。

  4. 写setUP(),主要是打开浏览器和打开站点

  5. 写一个test_search()用例写搜索的代码

  6. 写tearDown(),主要是浏览器退出操作

相关脚本代码如下:

# coding=utf-8  
import time  
import unittest  
from selenium import webdriver  
  
  
class BaiduSearch(unittest.TestCase):  
  
    def setUp(self):  
        """ 
        测试固件的setUp()的代码,主要是测试的前提准备工作 
        :return: 
        """  
        self.driver = webdriver.Chrome()  
        self.driver.maximize_window()  
        self.driver.implicitly_wait(8)  
        self.driver.get("https://www.baidu.com")  
  
    def tearDown(self):  
        """ 
        测试结束后的操作,这里基本上都是关闭浏览器 
        :return: 
        """  
        self.driver.quit()  
  
    def test_baidu_search(self):  
        """ 
        这里一定要test开头,把测试逻辑代码封装到一个test开头的方法里。
        :return: 
        """  
        self.driver.find_element_by_id('kw').send_keys('selenium')  
        time.sleep(1)  
        try:  
            assert 'selenium' in self.driver.title  
            print ('Test Pass.')  
        except Exception as e:  
            print ('Test Fail.', format(e))  
  
if __name__ == '__main__':  
    unittest.main()

解释:

最后结尾处的unittest.main(),添加这个是支持在cmd,里面,cd到这个脚本文件所在的目录,然后python 脚本名.py执行,如果不添加这一段,是无法执行cmd里面运行脚本的,在PyCharm中,不添加最后一段,也可以通过,右键 Run “unittest xxx”,来达到执行效果。

什么是POM

POM,中文字母意思是,页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,就是一个解决问题的思想。采用POM的目的,是为了解决前端中UI变化频繁,从而造成测试自动化脚本维护的成本越来越大。下图,形象描述了POM的好处。

图片

从上图看出,采取了POM设计思路和不采取的区别,把测试代码和页面元素都写在一个类文件,如果需要更改页面,那么就要修改页面元素定位,从而要修改这个类中测试代码,这个看起来和混乱。右侧,采取POM后,主要的区别就是,把页面元素和业务逻辑和测试脚本分离出来到两个不同类文件。ClassA只写页面元素定位,和业务逻辑代码操作的封装,ClassB只写测试脚本,不关心如何元素定位,只写调用ClassA的代码去覆盖不同的测试场景。如果前端页面发生变化,只需要修改ClassA的元素定位,而不需要去修改ClassB中的测试脚本代码。

POM主要有以下优点:

  1. 把web ui对象仓库从测试脚本分离,业务代码和测试脚本分离。

  2. 每一个页面对应一个页面类,页面的元素写到这个页面类中。

  3. 页面类主要包括该页面的元素定位,和这些元素相关的业务操作代码封装的方法。

  4. 代码复用,从而减少测试脚本代码量。

  5. 层次清晰,同时支持多个编写自动化脚本开发,例如每个人写哪几个页面,不影响他人。

  6. 建议页面类和业务逻辑方法都给一个有意义的名称,方便他人快速编写脚本和维护脚本。

以上就是今天的分享,如果觉得有用,欢迎分享转发给更多盆友💕。

以上笔者的经历更像一张横向的知识网,创建了一个交流平台 914172719 ,群内有各种技术同行交流、学习资料、面试经验等。其中用到jenkins、docker、moutebank、python编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。

在这里插入图片描述

最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

全网最全,Selenium自动化测试POM模式总结(详细) 在UI自动化测试中,PO是目前最为主流,也是公认最佳的设计模式;UI自动化测试最初是通过关键字驱动+数据驱动的形式来实现,然后升级到PO模式;什么是关键字驱动?简单而言,就是将Selenium常用功能进行二次封装譬如:把查找元素、点击、输入等原生方法进行封装特点:可以让不懂代码的测试人员也能做自动化测试,彻底地实现测试步骤、测试数据和程序的分离关键字驱动 vs RF? 阅读详情

相关推荐

Selenium 自动化测试框架

本文简单介绍了Selenium以及底层原理,介绍了使用Selenium进行自动化的基本操作

weixin_53990180的博客 1002

Selenium自动化测试框架

Selenium自动化测试

qq_44954371的博客 2万+

Selenium自动化测试框架实战:从WebDriver到Pytest与POM设计

自动化测试是现代软件工程中提升测试效率、保障软件质量的核心实践。其基本原理是通过脚本模拟用户操作,替代重复性手工测试,实现快速、准确的回归验证。在Web应用测试领域,Selenium WebDriver作为W3C标准协议,提供了跨浏览器、跨平台的自动化驱动能力,是构建UI自动化测试的基石。结合Pytest测试框架,可以高效管理用例执行、数据驱动和测试报告,而页面对象模型(POM)设计模式则能有效提升代码的可维护性和抵御UI变更的能力。这些技术共同构成了一个健壮的自动化测试框架,广泛应用于Web产品的冒烟测试

weixin_34277853的博客 570

python_selenium自动化测试框架

python_selenium自动化测试框架 设计思路 本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享。 框架采用python3 + selenium3 + PO + yaml + ddt + unittest等技术编写成基础测试框架,能适应日常测试工作需要。 1、使用Page Object模式将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),一个页面建一个对象类,提高用例的可维护性; 2、使用yaml管理页面控件元素数据和测试用例数据。例如元素ID等发.

test的博客 1506

自动化测试基础篇:Selenium 框架设计(POM),大厂面试经验分享

POM,中文字母意思是,页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,就是一个解决问题的思想。采用POM的目的,是为了解决前端中UI变化频繁,从而造成测试自动化脚本维护的成本越来越大。下图,形象描述了POM的好处。从上图看出,采取了POM设计思路和不采取的区别,左侧把测试代码和页面元素都写在一个类文件,如果需要更改页面,那么就要修改页面元素定位,从而要修改这个类中测试代码,这个看起来和混乱。

2401_84254296的博客 848

UI自动化测试面试核心:从Selenium原理到POM框架设计实战

UI自动化测试是保障软件质量、提升研发效能的关键实践,其核心在于模拟用户操作,对图形用户界面进行自动化验证。其工作原理通常基于客户端-服务器架构,通过驱动协议(如W3C WebDriver)向浏览器发送指令,实现元素的定位与交互。这项技术的价值在于将测试人员从重复的回归测试中解放出来,实现快速反馈,并能在持续集成/持续交付(CI/CD)流程中充当质量门禁。在实际应用中,面对动态页面、异步加载等复杂场景,**显式等待**和**Page Object Model (POM)** 等设计模式成为构建稳定、可维护测

weixin_28826521的博客 250

自动化测试基础篇:Selenium 框架设计(POM)

【导语】Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。本文介绍selenium的框架设计。

2301_77645750的博客 1590

基于Selenium的自动化测试框架DeerFlow:从POM设计到CI/CD集成的工程实践

自动化测试是软件工程中保障产品质量、提升发布效率的关键实践,其核心在于将重复、易错的手动测试转化为可重复执行的脚本。其原理是通过模拟用户操作,对软件界面或接口进行验证。在Web应用领域,Selenium作为主流的自动化测试工具,提供了操控浏览器的能力,但其原生API在编写复杂、可维护的测试套件时面临挑战。因此,基于Selenium封装、融入最佳工程实践的测试框架应运而生,其技术价值在于提升测试脚本的稳定性、可维护性和执行效率。这类框架广泛应用于Web应用的回归测试、冒烟测试及与CI/CD流水线的集成场景。本

weixin_28832121的博客 308

自动化测试基础:Selenium框架设计(POM)

unittest会自动化识别test开头的函数是测试代码,如果你写的函数不是test开头,unittest是不会执行这个函数里面的脚本的,这个千万要记住,所有的测试函数都要test开头,记住是小写的哦。最后结尾处的unittest.main(),添加这个是支持在cmd,里面,cd到这个脚本文件所在的目录,然后python 脚本名.py执行,如果不添加这一段,是无法执行cmd里面运行脚本的,在PyCharm中,不添加最后一段,也可以通过,右键 Run "unittest xxx",来达到执行效果。

huace3740的博客 692

Selenium UI自动化测试框架搭建:从POM设计到CI/CD集成实战

UI自动化测试是保障Web应用质量、提升回归测试效率的关键技术。其核心原理是通过脚本模拟真实用户操作,对界面元素进行定位、交互与验证。在众多工具中,Selenium凭借其跨浏览器支持、多语言绑定和成熟的生态系统,成为UI自动化领域的经典选择。通过引入页面对象模型(POM)设计模式,可以将页面元素与操作逻辑封装,极大提升测试代码的可维护性。结合pytest测试框架,能够高效管理测试用例、依赖和报告生成。最终,将自动化测试集成到CI/CD流水线中,可以实现代码变更后的即时验证,为持续交付提供稳定保障。本文以se

weixin_28839439的博客 339

MIT-BEVFusion系列六--bevfusion网络部分流程理解

简述bevfusion网络部分

duanmushuangquan的博客 4892

自动化测试基础:Selenium 框架设计(POM)

unittest会自动化识别test开头的函数是测试代码,如果你写的函数不是test开头,unittest是不会执行这个函数里面的脚本的,这个千万要记住,所有的测试函数都要test开头,记住是小写的哦。最后结尾处的unittest.main(),添加这个是支持在cmd,里面,cd到这个脚本文件所在的目录,然后python 脚本名.py执行,如果不添加这一段,是无法执行cmd里面运行脚本的,在PyCharm中,不添加最后一段,也可以通过,右键 Run "unittest xxx",来达到执行效果。

huace3740的博客 759

app编写需要哪种语言

原生App开发:优选Swift(iOS)和Kotlin(Android)。跨平台App开发:优选Flutter(Dart)和React Native(JavaScript)。游戏App开发:优选Unity(C#)和Unreal Engine(C++)。低代码工具:适合简单、快速的App制作。

fanying_98的博客 2070

Python Selenium自动化测试框架:从POM设计到Pytest实战

在软件测试领域,自动化测试框架是提升测试效率与代码可维护性的核心基础设施。其核心原理在于通过分层架构与设计模式,将测试逻辑、页面操作与数据进行解耦,从而构建出健壮、可复用的测试体系。从技术价值看,一个优秀的框架能显著降低维护成本,支持数据驱动测试,并实现多浏览器并行与CI/CD集成。在Web自动化测试场景中,Selenium结合Python测试框架已成为行业标准实践。其中,页面对象模型(POM)通过将Web页面抽象为类,集中管理元素定位器,有效隔离UI变动对测试脚本的影响;而Pytest凭借其简洁语法、强大

weixin_28837817的博客 229

C2000 CLA协处理器:嵌入式实时控制性能优化与实战指南

在嵌入式实时控制系统中,主CPU常因高频率、低延迟的控制算法而面临性能瓶颈。为解决此问题,协处理器技术应运而生,它通过硬件并行架构分担计算密集型任务,从而提升系统整体性能。其核心原理在于独立的计算单元与总线设计,能够实现近乎零延迟的响应,这对于电机驱动、数字电源等闭环控制场景具有极高的技术价值。本文聚焦于德州仪器C2000系列微控制器中的控制律加速器(CLA),深入解析其作为独立浮点协处理器如何通过任务调度与消息RAM通信机制,有效实现性能倍增,并提供了从内存配置到代码调试的完整工程实践方案。

weixin_29192211的博客 305

Monorepo与pnpm:前端项目管理的完美搭档

pnpm又称 performant npm,翻译过来就是高性能的npm。Monorepo是一种项目开发与管理的策略模式,它代表"单一代码仓库"(Monolithic Repository)。在Monorepo模式中,所有相关的项目和组件都被存储在一个统一的代码仓库中,而不是分散在多个独立的代码仓库中,这些项目之间还可能会有依赖关系。

m0_68271787的博客 2562

Selenium自动化测试实战:从环境搭建到POM框架设计

自动化测试是现代软件工程中提升效率、保障质量的核心实践,其原理是通过脚本模拟用户操作,自动执行测试用例。在Web自动化测试领域,Selenium凭借其支持真实浏览器操作和跨语言生态,成为行业基石技术,尤其适用于构建稳定、可维护的回归测试套件。本文聚焦Python技术栈,详解如何结合pytest框架与页面对象模型(POM),搭建从环境配置、元素定位到数据驱动测试的完整解决方案,并针对元素定位、等待机制等常见痛点提供实战避坑指南,帮助测试工程师和开发者高效开展Web自动化测试。

weixin_42723849的博客 318

Ubuntu Rtx3090 Cuda11.7 安装 pytorch3d

pytorch ubuntu pytorch3d 安装

G果的博客 2273

Python Selenium自动化测试入门:从环境搭建到POM框架设计

自动化测试是现代软件开发流程中保障产品质量、提升测试效率的核心技术。其原理是通过编写脚本模拟用户操作,自动执行测试用例并验证结果,从而替代重复性手工测试。在Web应用测试领域,Selenium作为行业标准工具,通过WebDriver协议实现对浏览器的精准控制,为持续集成和回归测试提供了强大支持。结合Python语言简洁高效的特性,开发者可以快速构建稳定可靠的自动化测试套件。本文聚焦于Selenium自动化测试的实践应用,详细解析了环境配置、元素定位、等待机制等关键环节,并引入了Page Object Mod

weixin_28840591的博客 289

WiFi基本概念(六)(L-STF,L-LTF)

L-STF它由10个OFDM symbol(1,0,1,0,1,0,1,0,1,0)构成,每个symbol是0.8us,GI是0.2us,总计10us。Symbol的长度是正常长度的1/4,因此称为Short training field,主要用于快速进行信号检测,信号同步,自动增益控制,接收天线选择(Diversity Selection)。 由于symbol长度是正常的1/4,子载波的宽度是正常的4倍,能进行初略的信道估计,其使用了-24, -20, -16, -12, -8, -4, 4, 8, 1

reekyli的专栏 6862

[SoC]SoC验证中bootcode与firmware相关验证经验总结

本文总结了SoC验证中bootcode和firmware的验证经验。重点介绍了两种数据加载方法:1)使用Verilog系统函数$readmemh/$readmemb直接写入ROM/ARAM,需注意文件路径、格式和斜杠方向;2)通过Memory Hierarchy在initial块中操作,需要添加适当延时并注意路径拼接。文章还提供了在testcase phase中先读取数据到HASH再写入SRAM的示例,并强调加载后需使能edc_bypass以避免ECC错误。验证过程中需特别注意文件位置、格式要求及路径处理等

元直的博客 2497

Selenium自动化测试框架实战:从POM设计到CI/CD集成

自动化测试是现代软件工程中提升交付效率与质量的关键实践,其核心原理是通过脚本模拟用户操作,替代重复性手工验证。在Web UI自动化领域,Selenium凭借其开源、跨浏览器和多语言支持的特性,成为构建稳定测试体系的行业标准技术方案。其价值在于将测试人员从繁琐的回归测试中解放出来,专注于探索性测试与用户体验分析,尤其适用于电商、金融等需要频繁进行全流程验证的应用场景。要实现高效、可维护的自动化,必须采用科学的设计模式,其中页面对象模型(POM)通过将页面元素定位与业务逻辑分离,大幅提升了代码的可读性和可维护性

weixin_33859135的博客 344

45 - Android系统源码-crosvm 实战:基于 KVM 的 Rust 安全虚拟机监控器核心技术

摘要:crosvm 是 Google 开发的基于 KVM 的轻量级虚拟机监控器(VMM),采用 Rust 语言编写,专为 ChromeOS 和 Android 设计。其核心特点包括: 安全架构:通过 Rust 的内存安全特性和多进程隔离(每个设备运行在独立沙箱进程)大幅降低攻击面 性能优化:基于 KVM 的硬件虚拟化支持,结合异步 I/O (io_uring/epoll) 实现高效设备模拟 模块化设计:清晰的 trait 抽象层(Hypervisor/Vm/Vcpu)支持跨平台扩展 Android 集成

保持专注,保持热爱 225

Python Selenium UI自动化测试实战:从环境搭建到POM框架设计

UI自动化测试是现代软件工程中提升测试效率与可靠性的关键技术,其核心原理是通过程序模拟真实用户操作,实现回归测试的自动化执行。在众多实现方案中,Python与Selenium的组合因其简洁语法和强大生态,成为构建高效、可维护自动化测试套件的首选。该技术能显著提升测试覆盖率和一致性,是实施测试左移、保障交付质量的重要实践。本文聚焦于Python Selenium,深入解析其环境搭建、核心操作、等待机制等关键环节,并引入Page Object Model设计模式,旨在解决元素定位不稳定、脚本维护成本高等工程难题

weixin_28829479的博客 340

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 测试员薪资两极分化,如何成为月薪20K的自动化测试?
下一篇: 我八年测开经验,领导说我写的测试文档还不如应届生
字节自动化测试
博客等级 码龄6年 7034粉丝 1810原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值