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,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

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

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

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

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

相关文章

MybatisPlus @TableField之SqlCondition源码解析

应用对象:模型,作用:调用IService接口,使用查询包装器实现灵活的条件查询。 TableField(conditionSqlCondition.LIKE) 注解使用逻辑 com.baomidou.mybatisplus.extension.service.IService.page(分页对象,查询包装器…

“区块链技术在网络安全领域的革新应用与挑战“

区块链技术,以其去中心化、不可篡改和透明度高的特性,在网络安全领域展现出了巨大的革新潜力,同时也带来了一系列新的挑战。以下是区块链技术在网络安全领域的应用及其面临的主要挑战的深入分析。 革新应用 1. 数据保护与隐私增强&#xff…

PHP身份证识别接口、线上平台如何实现身份证实名认证功能?

线上平台实现身份证实名认证的功能,需要结合身份证识别接口来完成。首先,用户通过上传身份证图片或者拍照的方式实现证件信息的提取,身份证实名认证接口通过对提取到的证件信息进行核验,以此来实现线上用户身份的实名认证&#xf…

LabVIEW车轮动平衡检测系统

LabVIEW车轮动平衡检测系统 随着汽车行业的快速发展,车轮动平衡问题对乘坐舒适性、操控稳定性及安全性的影响日益凸显,成为了提高汽车性能的一个关键环节。传统的检测系统因精度低、成本高、操作复杂等问题,难以满足现代汽车行业的需求。开发…

行车安全:UWB模块的智能化在车辆安全系统中的作用

随着交通车辆数量的不断增加和道路交通拥堵的加剧,车辆安全问题日益引起人们的关注。在这种背景下,超宽带(UWB)技术作为一种新兴的定位技术,正逐渐应用于车辆安全系统中,为提高车辆行车安全性提供了新的解决…

Unity真机打包地形不显示

Using terrain.drawInstanced in a build - Shader unsupported: Hidden/Nature/Terrain/Utilities Terrain missing on build 大概是两种思路 第一是材质shader丢失,把Terrain相关的shader都添加到ProjectSetting里 第二是地形Inspector面板,把Draw …

Django配置

后端开发: python 解释器、 pycharm 社区版、 navicate 、 mysql(phpstudy) 前段开发: vs code 、 google 浏览器 django 项目配置 配置项目启动方式 创建模型 创建一个应用 在应用中创建模型类 根据模型类生成数据表 创建应用 创建模型类 …

智能除螨—wtn6040-8s语音芯片方案引领除螨仪新时代

语音螨仪开发背景: 随着物联网技术的快速发展,除螨仪作为家庭清洁的重要工具,其智能化、人性化的设计成为提升市场竞争力的关键。置入语音芯片的除螨仪,通过开机提示、工作状态反馈、操作指引、故障提醒等内容。用户可以更加直观…

邦注科技三机一体除湿干燥机在工业中的应用

三机一体除湿干燥机在工业中的应用广泛且重要,其结合了传统除湿机、冷凝器和加热器的功能,具有节能、环保、方便等特点。以下是关于三机一体除湿干燥机在工业中应用的详细解析: 一、应用领域 电子制造行业:在半导体、集成电路和…

安卓手机APP开发__超宽带(UWB)通信

安卓手机APP开发__超宽带(UWB)通信 目录 概述 控制方/发起方与控制方/响应方 参数范围 后台测距 STS 配置 步骤 使用限制 代码示例 示例应用 UWB 范围 RxJava3 支持 生态系统支持 支持 UWB 的移动设备 第三方 SDK 概述 注意 :UWB 目前仅支持 Jetpac…

JavaScrpit基础入门

JavaScript 是一种用于网页开发的脚本语言,它主要用于增强网页的交互性和动态性。HTML 用于定义网页的结构,包括文本、图像、链接等内容,而 CSS 用于定义网页的样式,包括颜色、布局、字体等。JavaScript 通过与 HTML 和 CSS 结合使…

大模型中的Tokenizer

在使用GPT 、BERT模型输入词语常常会先进行tokenize 。 tokenize的目标是把输入的文本流,切分成一个个子串,每个子串相对有完整的语义,便于学习embedding表达和后续模型的使用。 一、粒度 三种粒度:word/subword/char word词&a…

【云原生】Kubernetes----POD调度策略

目录 引言 一、Pod调度策略 (一)基本概述 (二)调度原则 (三)Predicate常见算法 (四)优先级排序 (五)调度过程 1.过滤阶段 2.优先级排序 3.选择最优…

raspberry pi/orienge pi等arm架构硬件打包ros humble docker视觉及机器人开发镜像

raspberry pi/orienge pi等arm架构硬件打包ros humble docker开发镜像 文章目录 前言准备工作拉取镜像编写Dockerfile编译docker镜像启动镜像docker-compose文件编写总结前言 这篇文章主要用于定制化打包需要的docker镜像,由于ros1提供的镜像源是国外的很多软件无法更新,所以…

大模型部署推理应用技术浅析

大模型完成预训练后不是就万事大吉了,离推理应用还有很大距离,需要经过微调、部署等一系列工程化工作。尤其是在2B的行业大模型应用中,为解决大模型的幻觉、时效性和推理成本问题,需要建立单一模型之上的体系。模型部署中的技术大…

使用uniapp开发支付宝小程序时引入卡包插件

1、官网文档 https://opendocs.alipay.com/pre-open/03k88a?pathHash30ce86a9 2、代码开发 //manifest.json 配置文件添加卡包插件 "mp-alipay": {"usingComponents": true,"appid": "xxxxxxxxxxxxxxxxx","plugins": {&…

深入理解Seata:分布式事务的解决方案

在现代的微服务架构中,随着业务系统的不断拆分和模块化,分布式事务成为一个重要的挑战。为了解决微服务架构下的分布式事务问题,Seata应运而生。Seata(Simple Extensible Autonomous Transaction Architecture)是一款开…

Windows找出权限维持的后门

Windows权限维持主要包含活动隐藏、自启动等技术。 隐藏文件 利用文件属性 最简单的一种隐藏文件的方式,文件右键属性,勾选隐藏,点击确定后,在这个文件里看不到刚刚的文件了。 如果要让文件显示出来,就点击查看&…

C++:round函数用法

C:round函数用法 C:round函数用法 正常用法 对于小数而言,round()函数仅仅保留到整数位,即仅仅对小数点后一位四舍五入 round(1.5)2.000000 round(1.56)2.000000 round(-1.5)-2.000000 round(-1.56)-2.000000保留小数用法 如果…

matplotlib ---词云图

词云图是一种直观的方式来展示文本数据,可以体现出一个文本中词频的使用情况,有利于文本分析,通过词频可以抓住一篇文章的重点 本文通过处理一篇关于分析影响洋流流向的文章,分析影响洋流流向的主要因素都有哪些 文本在文末结尾 …