当前位置: 首页 > news >正文

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

当使用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自动化测试代码的可读性、可维护性和可重用性,同时也提升了测试的稳定性和可靠性。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

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

当使用Selenium进行UI自动化测试时,Page Object Model(POM)是一种最佳实践的设计模式。POM的核心思想是通过将页面封装成对象,使得测试代码更加清晰、可维护和可重用。 POM的主要组成部分包括页面对象类、元素定位方式和操作方法…...

朋友圈定时发送设置

人日常中不可缺少的一件事,同时也是企业用来触达客户的重要渠道,下面一起来了解下微信朋友圈怎么定时发送呢?...

Spark SQL 中DataFrame DSL的使用

在上一篇文章中已经大致说明了DataFrame APi,下面我们具体介绍DataFrame DSL的使用。DataFrame DSL是一种命令式编写Spark SQL的方式,使用的是一种类sql的风格语法。 文章链接: 一、单词统计案例引入 import org.apache.spark.sql.{DataFrame, SaveMod…...

qt 布局学习笔记

目录 qt下载地址: widget 宽高 管理信息列表源码 c版: pro文件: qt 设置水平布局,里面有两个按钮,每个按钮就变的很宽,怎么设置按钮的精确位置 设置固定大小: 使用弹性空间(…...

设计模式复习

一、模式所采用的关系(e.g.继承…) UML图例 二、各模式的特点、优缺点 1.创建型(5种创建型口诀: 抽象工厂 按照 工厂方法,建造 单例 原型) 将对象的使用和创建分离,使用对象时无需知道对象的创建细节&a…...

前后端开发入门全攻略:零基础学起

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、前后端开发概览 二、后端开发基础:Flask框架入门 代码案例:Hel…...

Android Studio无法改变Button背景颜色解决办法

大家好,我是咕噜铁蛋!今天我来和大家探讨一个在Android开发中常见但可能让初学者感到困惑的问题——如何在Android Studio中改变Button的背景颜色。这个问题看似简单,但实际操作中可能会遇到一些意想不到的挑战。接下来,我将从多个…...

元宇宙三维互动展厅让体验者进入一个充满奇幻与创意的数字世界

元宇宙数字产品展厅搭建编辑器凭借强大的三维可视化互动功能,为用户带来前所未有的沉浸式数字展览体验。 在元宇宙数字产品展厅搭建编辑器中,用户可以轻松打造逼真的三维展览环境,通过VR虚拟现实技术,仿佛置身于一个充满奇幻与创意…...

java高级——Collection集合之List探索(包含ArrayList、LinkedList、Vector底层实现及区别,非常详细哦)

java高级——Collection集合之List探索 前情提要文章介绍提前了解的知识点1. 数组2. 单向链表3. 双向链表4. 为什么单向链表使用的较多5. 线程安全和线程不安全的概念 ArrayList介绍1. 继承结构解析1.1 三个标志性接口1.2 AbstractList和AbstractCollection 2. ArrayList底层代…...

JAVA-->方法的使用详解

JAVA–>方法的使用详解 1.方法的概念及使用 1.1 什么是方法 : 方法就是一个代码片段. 类似于 C 语言中的 “函数”。 1.2 方法定义 / 方法定义 修饰符 返回值类型 方法名称([参数类型 形参 ...]){方法体代码;[return 返回值]; }判断是否为闰年 public class Method{ //…...

基于 vLLM 搭建 DeepSeek-V2 Chat 服务

直奔主题。 安装vLLM 官方实现的代码还没有 merge 到 vLLM 主分支,所以直接 git clone DeepSeek 的分支。 git clone https://github.com/zwd003/vllm.git cd vllm pip install -e .源码安装大概耗时 10 分钟。 OpenAI 接口规范启动 官方 Github 放的是单条推理…...

Kafka 安装教程和基本操作

一、简介 Kafka 是最初由 Linkedin 公司开发,是一个分布式、分区的、多副本的、多订阅者,基于 zookeeper 协调的分布式日志系统(也可以当做 MQ 系统),常见可以用于 web/nginx 日志、访问日志,消息服务等等…...

Java 五种内部类演示及底层原理详解

内部类 什么是内部类 在A类的内部定义B类,B类就被称为内部类 发动机类单独存在没有意义 发动机为独立个体 可以在外部其他类里创建内部类的对象去调用方法 类的五大成员 属性 方法 构造方法 代码块 内部类 内部类的访问特点 内部类可以直接访问外部类的成员&a…...

【UnityShader入门精要学习笔记】第十五章 使用噪声

本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更,有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 使用噪声上…...

C++ ─── string的完整模拟实现

本博客实现了string的常见接口实现 下面是用到的一些函数&#xff0c;供大家回顾复习 string.h #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace bit {class string{public:typedef char*…...

安卓中的图片压缩

安卓中如何进行图片压缩&#xff1f; 在安卓中进行图片压缩通常有以下几种方法&#xff1a; 质量压缩: 通过降低图片的质量来减小文件大小。这可以通过Bitmap的compress()方法实现&#xff0c;其中可以设置压缩质量&#xff08;0-100&#xff09;。 ByteArrayOutputStream baos…...

centOS7.9 DNS配置

1.DNS规划 dns.sohu.com192.168.110.111Awww.sohucom192.168.110.112Aoa.sohu.com 192.168.110.113A 2.安装 bind yum install -y bind bind-utils 3. 编辑主配置文件 vim /etc/named.conflisten- on port 53 { any; }; allow- query { any; }; 4.配置区域文件 …...

设计模式20——职责链模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 职责链模式&#xff08;Chain …...

android13 差分包制作命令

./out/host/linux-x86/bin/ota_from_target_files -v -iCode/SourceCode/android13/ntls/userdebug/hpg2_24-target_files-38.zip --block -p ./out/host/linux-x86 Code/SourceCode/android13/ntls/userdebug/hpg2_24-target_files-39.zip update_ud.zip 脚本命令行参数 命令…...

Flink-cdc更好的流式数据集成工具

What’s Flink-cdc? Flink CDC 是基于Apache Flink的一种数据变更捕获技术&#xff0c;用于从数据源&#xff08;如数据库&#xff09;中捕获和处理数据的变更事件。CDC技术允许实时地捕获数据库中的增、删、改操作&#xff0c;将这些变更事件转化为流式数据&#xff0c;并能够…...

Snes9x音频系统深度探索:Blargg SPC库如何实现高保真声音模拟

Snes9x音频系统深度探索&#xff1a;Blargg SPC库如何实现高保真声音模拟 【免费下载链接】snes9x Snes9x - Portable Super Nintendo Entertainment System (TM) emulator 项目地址: https://gitcode.com/gh_mirrors/sn/snes9x Snes9x作为一款经典的Super Nintendo Ent…...

2025届学术党必备的十大降重复率神器推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术研究范畴之内&#xff0c;论文撰写常常会由于其结构繁杂且格式规范极为严格&#xff0…...

告别虚拟机!在Windows上用WSL2和NDK r27c交叉编译Android动态库(附CMake集成避坑指南)

在Windows上利用WSL2与NDK r27c高效构建Android动态库的完整指南 对于Android开发者而言&#xff0c;跨平台编译一直是个令人头疼的问题。传统虚拟机方案虽然功能完整&#xff0c;但资源占用高、启动慢&#xff0c;而纯Windows环境下的NDK工具链又常常遇到各种兼容性问题。本文…...

Qwen3-14B私有部署镜像Visio流程图智能生成:从文本描述到架构图

Qwen3-14B私有部署镜像Visio流程图智能生成&#xff1a;从文本描述到架构图 1. 引言&#xff1a;技术文档绘图的痛点与解决方案 技术文档编写过程中&#xff0c;最耗时费力的环节之一就是绘制系统架构图和流程图。传统方式需要手动在Visio中拖拽图形、调整布局、添加连接线&a…...

Nanbeige4.1-3B惊艳效果:同一硬件下对比Phi-3-mini,Nanbeige长文本保持率+35%

Nanbeige4.1-3B惊艳效果&#xff1a;同一硬件下对比Phi-3-mini&#xff0c;Nanbeige长文本保持率35% 最近&#xff0c;一个只有30亿参数的小模型在开发者圈子里悄悄火了起来。它不是那种动辄千亿参数、需要顶级显卡才能跑的“巨无霸”&#xff0c;而是一个在普通硬件上就能流畅…...

deepseek硬件电路实战:构建pA级电流测量系统的核心技术与工程实践

1. 从理论到实践&#xff1a;pA级电流测量的核心挑战 测量皮安级电流就像在暴风雨中听清一根针落地的声音。我十年前第一次尝试做这种高精度测量时&#xff0c;连示波器上全是噪声信号&#xff0c;根本分不清哪些是真实信号。pA级测量最核心的挑战在于&#xff0c;我们要测量的…...

终极指南:一键解决iPhone USB网络共享驱动问题

终极指南&#xff1a;一键解决iPhone USB网络共享驱动问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mirrors/ap…...

终极指南:如何在TouchGal一站式Galgame社区发现你的视觉小说宝藏

终极指南&#xff1a;如何在TouchGal一站式Galgame社区发现你的视觉小说宝藏 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next TouchGa…...

3步掌握AntiMicroX:让游戏手柄变身全能控制中心

3步掌握AntiMicroX&#xff1a;让游戏手柄变身全能控制中心 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.com/GitHub_Tren…...

5分钟掌握PESQ:Python语音质量评估终极指南

5分钟掌握PESQ&#xff1a;Python语音质量评估终极指南 【免费下载链接】PESQ PESQ (Perceptual Evaluation of Speech Quality) Wrapper for Python Users (narrow band and wide band) 项目地址: https://gitcode.com/gh_mirrors/pe/PESQ 想要客观评估语音处理算法效果…...