UI自动化测试最佳设计模式POM

news2025/1/17 6:05:27
  •  📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢交流讨论:加入1000人软件测试技术学习交流群
  • 📢资源分享:进了字节跳动之后,才发现师兄给的这份资料有多重要!
  • 📢 最困难的时候,也就是我们离成功不远的时候!

当使用Selenium进行UI自动化测试时,Page Object Model(POM)是一种最佳实践的设计模式。POM的核心思想是通过将页面封装成对象,使得测试代码更加清晰、可维护和可重用。

POM的主要组成部分包括页面对象类、元素定位方式和操作方法。

1、页面对象类: 

页面对象类是POM的核心。每个页面都有一个对应的页面对象类,该类包含了该页面的所有元素和操作。通常,页面对象类是一个Python类,在构造方法中接收一个驱动对象(如Selenium的WebDriver对象),并定义了页面的所有元素和操作方法。通过将页面的元素和操作封装到页面对象类中,可以提高代码的可读性和可维护性。

2、元素定位方式: 

在页面对象类中,使用Selenium的By类定义元素的定位方式。可以使用多种方式来定位元素,如ID、class name、XPath、CSS selector等。在页面对象类的构造方法中,可以将这些定位方式作为元组存储,并赋值给相应的属性。

3、操作方法: 

页面对象类中的操作方法定义了对页面元素的操作,比如输入文本、点击按钮等。这些方法通过调用驱动对象的相应方法来实现操作。例如,使用self.driver.find_element(*self.username_input).send_keys(username)来输入用户名。通过将页面操作方法封装到页面对象类中,可以减少代码的重复和冗余,并提高代码的可维护性。

4、测试脚本: 

在测试脚本中,首先需要实例化一个浏览器驱动对象,如driver = webdriver.Chrome()。然后,实例化页面对象类,例如login_page = LoginPage(driver)。接下来,使用驱动对象访问被测网页,如driver.get('http://example.com/login')。最后,使用页面对象的方法来执行页面操作,例如login_page.enter_username('user123')。

使用POM设计模式的优点包括:

  • 提高代码的可读性:通过将页面元素和操作封装到页面对象类中,使得测试代码更加清晰和易于理解。

  • 提高代码的可维护性:当页面发生变化时,只需要修改页面对象类中的元素定位方式,而不需要修改所有的测试脚本。这样,可以轻松地维护和管理测试代码。

  • 实现代码的重用:可以在不同的测试脚本中重用页面对象类,避免了重复编写相同的定位和操作代码。

  • 提高测试的稳定性和可靠性:通过封装操作方法和断言方法到页面对象类中,可以减少代码的重复和冗余,提高测试的健壮性。

下面是一个详细的示例,演示如何使用POM和Selenium进行UI自动化测试:

  • 安装Selenium: 在开始之前,首先需要安装Selenium库。可以通过pip命令进行安装:

pip install selenium 
  • 导入Selenium和其他所需的库:

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
  • 创建页面对象类:

class LoginPage:     def __init__(self, driver):         self.driver = driver         self.username_input = (By.ID, 'username')         self.password_input = (By.ID, 'password')         self.login_button = (By.ID, 'login_button')         def enter_username(self, username):     self.driver.find_element(*self.username_input).send_keys(username)     def enter_password(self, password):     self.driver.find_element(*self.password_input).send_keys(password)     def click_login_button(self):     self.driver.find_element(*self.login_button).click() 
  • 实例化浏览器驱动对象:

driver = webdriver.Chrome()
  • 实例化页面对象:

login_page = LoginPage(driver)
  • 打开被测网页:

driver.get('http://example.com/login')
  • 使用页面对象执行相关操作:

login_page.enter_username('user123') login_page.enter_password('pass123') login_page.click_login_button()

在上述示例中,首先定义了一个名为LoginPage的页面对象类。在该类的构造方法中,传入了浏览器驱动对象,并使用By类定义了页面元素的定位方式(这里使用了元组的形式)。然后,在类中定义了几个方法,分别用于输入用户名、输入密码和点击登录按钮。

在实际测试脚本中,首先实例化了一个浏览器驱动对象driver(这里使用了Chrome浏览器),并实例化了LoginPage对象login_page。然后,使用驱动对象访问被测网页。接下来,使用页面对象login_page调用相应的方法,来执行登录操作。

总之,Page Object Model(POM)是一种优秀的设计模式,它通过将页面封装成对象,提高了UI自动化测试代码的可读性、可维护性和可重用性,同时也提升了测试的稳定性和可靠性。

如果对软件测试、接口、自动化、性能测试、测试开发、面试经验交流。感兴趣可以加裙485187702,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1197358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW中NIGPIB设备与驱动程序不相关的MAX报错

LabVIEW中NIGPIB设备与驱动程序不相关的MAX报错 当插入GPIB-USB设备时,看到了NI MAX中列出该设备,但却显示了黄色警告指示,并且指出Windows没有与您的设备相关的驱动程序。 解决方案 需要安装能兼容的NI-488.2驱动程序。 通过交叉参考以下有…

WebSphere Liberty 8.5.5.9 (一)

WebSphere Liberty 8.5.5.9 (一) 安装 1. 从官网下载 WebSphere Liberty 8.5.5.9 2. 解压 解压到 D:\wlp-webProfile7-java8-8.5.5.93. 启动 D:\wlp-webProfile7-java8-8.5.5.9\wlp\bin>server start 正在启动服务器 defaultServer。 服务器 defaultServer 已启动。4. …

UWB人员定位系统的原理与应用

uwb定位技术源码 uwb高精度定位系统源码 uwb人员定位系统基于什么原理? UWB人员定位系统基于超宽带(Ultra WideBand)技术进行位置定位。它利用超短脉冲信号,通过测量信号的到达时间差和信号强度等信息,实现对目标位置的定位。UWB技术具有高…

Docker安装详细步骤及相关环境安装配置

目录 一、从空白系统中克隆Centos7系统 二、使用xshell连接docker_tigerhhzz虚拟机 ​编辑 三、在CentOS7基础上安装Docker容器 最近自己在虚拟机上搭建一个docker,将项目运行在虚拟机中。 需要提前准备的工具,XShell(远程链接工具),VM(…

Qt——连接mysql增删查改(仓库管理极简版)

目录 UI布局设计 .pro文件 mainwindow.h main.cpp UI布局设计 .pro文件 QT core gui QT core gui sql QT sqlgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any …

C语言数据结构-----链表类型详解及链表练习题

0.前言 之前我讲解了循序表以及单链表,接下来我会在介绍几个不同的链表,并举例相关习题使大家能够更加深入的理解。 前期内容如下: 链接: 顺序表(动态顺序表增删查改的代码实现) 链接: 单链表(无头单向不循环)增删查改的代码实现 链接: [双向…

带你详细了解git的【分支和标签】

🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​ 🌟在这里,我要推荐给大家我的专栏《git》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,…

使用xlwings实现对excel表中指定列隔行求和

需要对上表中的营业额隔行求和,即橙色背景颜色的求和,无背景颜色的求和。 看了大佬的视频,有两种方法: 1.加辅助列 2.使用判断行的奇偶函数,然后在用sumproduct函数 在此,我使用xlwings对excel表中数据…

来世再不选Java!

危机感 距离上一次找工作面试已经过去快2年了,那时候正值疫情肆虐,虽然还未感受到“寒潮来临”的苗头,但最终还是成功通过了几轮面试,顺利签约。在目前公司待了2年了,在大环境的影响下,没有加薪、没有年终…

经典OJ题:奇偶链表

目录 题目: 示例: 解题思路: 方法一:双链表链接法 图例: 代码演示: 解题效果: 方法二:奇偶指针 图例: 代码演示: 题目: 给定单链表…

vmware开启ipv6

说明 在 ipv4 基础上配置ipv6网络。 分享 大数据博客列表开发记录汇总个人java工具库 项目https://gitee.com/wangzonghui/object-tool 包含json、string、集合、excel、zip压缩、pdf、bytes、http等多种工具,欢迎使用。 vm开启ipv6 设置vmware 打开vmware点击编…

第二章 03Java基础-IDEA相关叙述

文章目录 前言一、IDEA概述二、IDEA下载和安装三、IDEA项目结构介绍四、IDEA的项目和模块操作总结前言 今天我们学习Java基础,IDEA下载以及相关配置和基础使用方法 一、IDEA概述 1.IDEA全称IntelliJ IDEA,是用于Java语言开发的集成工具,是业界公认的目前用于Java程序开发最…

“茶叶销售策略:以‘3人回本大放送’模式引领快速流量裂变“

你是否曾经为茶叶的高品质而烦恼?是否曾经为挑选一款适合自己的茶叶而纠结?现在,有一个销售茶叶的团队,他们家599块钱一盒的茶叶,让你轻松品味高端的滋味。他们在小程序这一个渠道,只用了23天的时间&#x…

MYSQL 慢查询和慢查询日志

在数据库管理中,慢查询是指执行时间较长的 SQL 查询语句。这类查询可能导致系统性能下降,影响用户体验。为了帮助识别和解决这些性能问题,数据库管理系统通常提供了慢查询日志,用于记录执行时间超过一定阈值的查询。本文将深入探讨…

计算机视觉:使用opencv进行直线检测

1 直线检测介绍 在图像处理中,直线检测是一种常见的算法,它通常获取n个边缘点的集合,并找到通过这些边缘点的直线。其中用于直线检测,最为流行的检测器是基于霍夫变换的直线检测技术。 1.1 什么是霍夫变换 霍夫变换&#xff08…

Ribbon 负载均衡原理和策略

目录 一、Ribbon 是什么 二、Ribbon 负载均衡原理 三、Ribbon 负载均衡策略 四、Ribbon的应用场景 一、Ribbon 是什么 Ribbon是一个开源的、基于HTTP和TCP的客户端负载均衡工具,它提供了一个简单的、基于配置的负载均衡策略,可以帮助开发人员更轻松…

R系组播调优方案

修改/etc/sysctl.conf添加如下内容: Vim /etc/sysctl.con net.ipv4.ip_forward1 net.ipv4.ip_nonlocal_bind1 net.ipv4.conf.all.rp_filter0 net.ipv4.conf.default.rp_filter0 net.bridge.bridge-nf-call-arptables 0 net.bridge.bridge-nf-call-ip6tables 0 …

ChatGLM3 langchain_demo 代码解析

ChatGLM3 langchain_demo 代码解析 0. 背景1. 项目代码结构2. 代码解析2-1. utils.py2-2. ChatGLM3.py2-3. Tool/Calculator.py2-4. Tool/Weather.py2-5. main.py 0. 背景 学习 ChatGLM3 的项目内容,过程中使用 AI 代码工具,对代码进行解释,…

uniapp——项目02

分类 创建cate分支 渲染分类页面的基本结构 效果页面,包含左右两个滑动区. 利用提供的api获取当前设备的信息。用来计算窗口高度。可食用高度就是屏幕高度减去上下导航栏的高度。 最终效果: 每一个激活项都特殊背景色,又在尾部加了个红条一样的东西。 export d…

运动耳机推荐,运动耳机哪个牌子好性价比高?哪个运动耳机好?

​无论你是喜欢户外跑步,还是喜欢室内健身,运动耳机都能为你提供强大的音乐动力,帮助你更好地享受运动的过程,边流汗边听歌太畅快了!因此。想了解哪个品牌的运动耳机更适合自己,就来看看我发布的这篇文章吧…