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,一经查实,立即删除!

相关文章

LabVIEW车轮动平衡检测系统

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

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

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

Django配置

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

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

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

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

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

大模型中的Tokenizer

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

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

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

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

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

Windows找出权限维持的后门

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

matplotlib ---词云图

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

着色器技术在AI去衣中的魔法般的作用

引言: 在数字图像处理的世界中,AI去衣技术正逐步成为研究的前沿。它利用人工智能的强大能力,实现对图像中衣物的智能识别与处理。在这一过程中,着色器(Shader)技术扮演了至关重要的角色。本文将深入探讨着色…

【VTKExamples::Utilities】第十五期 ShepardMethod

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ShepardMethod,并解析接口vtkShepardMethod,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ…

没有可用软件包 docker-ce。 错误:无须任何处理

特么的各种百度查看,全是一些废话!!!centos7安装不上docker,都是老的代码了: yum install docker-ce 解决方案: # CentOS yum install docker-io

深度学习之CNN卷积神经网络

一.卷积神经网络 1. 导入资源包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import sklearn import tensorflow as tf from tensorflow import keras注:from tensorflow import keras:从TensorFlow库中导入Keras模块&am…

【Unity之FGUI】白仙章Fairy GUI控件详解二

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:就业…

《征服数据结构》双向链表

摘要: 1,双链表的介绍 2,双链表的用途 3,双链表的节点插入和删除 1,双链表的介绍 前面我们讲过单链表,单链表的特点就是只能往后访问不能往前访问。单链表一般在面试中用的比较多,比如删除倒数第…

广东商标协会批复为世界酒中国菜的指导单位

广东商标协会批复荐酒师公司成为“世界酒中国菜”活动指导单位 一、批复背景与意义 广东商标协会正式批复荐酒师国际认证(广州)有限公司,成为备受瞩目的“世界酒中国菜”系列活动的指导单位。该活动旨在共建“一带一路”倡议、助力“乡村振兴…

Unity射击游戏开发教程:(28)敌人被摧毁时掉落的能量提升

在这篇文章中,我将介绍如何在敌人被摧毁时产生能量提升。 首先,有一个生成管理器,负责生成敌人和能量提升。我正在对其进行转换,以便当敌人被摧毁时,有可能会掉落能量。本文将仅介绍当敌人被摧毁时掉落的能量道具。我将介绍为电源添加一个平衡的生成系统。 Spawn Manager…

最简单的 UDP-RTP 协议解析程序

最简单的 UDP-RTP 协议解析程序 最简单的 UDP-RTP 协议解析程序原理源程序结果下载链接参考 最简单的 UDP-RTP 协议解析程序 本文介绍网络协议数据的处理程序。网络协议数据在视频播放器中的位置如下所示。 本文中的程序是一个 UDP/RTP 协议流媒体数据解析器。该程序可以分析 …

Sqli-labs-master靶场1-20通关教程

目录 SQL注入基本语句 Less-1(字符型-闭合 ) Less-2(数字型) Less-3(字符型-闭合 ) ) Less-4(字符型-闭合 ") ) Less-5(报错注入-闭合 ) Less-…