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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CCF-CSP】 202309-3 梯度求解

思路: 将表达式整理成只有目标求导变量的无括号加法表达式,其他变量均代入其值,然后利用最简单的求导公式,求出最终值。 样例1 x1 x1 x1 * x2 *转换成 x1*x1*x1x1*x2 若求导x1,则只留下x1,变为 x1*x1*x1…

6公里远距离视频传输,飞睿智能无线CV5200模组方案,设备稳定连接通信

随着科技的不断进步,物联网(IoT)和智能设备正逐渐渗透到我们生活的方方面面。在这一进程中,远距离无线通信成为推动行业发展的关键因素。 智能控制、远程无线传输是实现设备间的协作场景的关键,CV5200模组通过无线WiF…

大白话70个你必须知道的AI重要概念

本文按英文起首字母顺序,整理了70个常用的生成式AI领域常用概念,试图以大白话进行诠释,如果你不求甚解、但也求略解的话,欢迎收藏。第一部分从A到I,第二部分从L到P,第三部分从Q到Z。 A 1 Agents: 代理人。…

民国漫画杂志《时代漫画》第31期.PDF

时代漫画31.PDF: https://url03.ctfile.com/f/1779803-1248635507-e54e55?p (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

笔记-python-map的用法

map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。 1、当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到…

【御控工业物联网】 Java JSON结构转换、JSON结构重构、JSON结构互换(17):数组To对象——键值互换属性重组

文章目录 一、JSON结构转换是什么?二、核心构件之转换映射三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

轻兔推荐 —— plausible-analytics

简介 Plausible Analytics 是一个开源的、界面美观、简单易用的网站访问量统计工具。 - 易接入:仅需一行代码就可给网站添加统计数据。 - 数据指标统计完整:可直观查看外链来源、页面访问量排序、访问设备、访问地区等。 特点 无需Cookie&#xff…

基于飞书机器人跨账号消息提醒

事情的起因是飞书中不同的账号不能同时登录,虽然可以在飞书的账号切换页面看到其他账号下是否有消息提醒(小红点),但是无法实现提醒功能,很不优雅,因此本文尝试提出一种新的方式实现不同账号之间的提醒功能…

JVM的垃圾回收机制--GC

垃圾回收机制,是java提供的对于内存自动回收的机制。java不需要像C/C那样手动free()释放内存空间,而是在JVM中封装好了。垃圾回收机制,不是java独创的,现在应该是主流编程语言的标配。GC需要消耗额外的系统资源,而且存…

222.完全二叉树的节点个数

给出一个完全二叉树,求出该树的节点个数。 示例 1: 输入:root [1,2,3,4,5,6]输出:6 示例 2: 输入:root []输出:0 示例 3: 输入:root [1]输出:1 提示…

uni-app基础框架搭建(vue3+ts+vite)

1.基础准备 uni-app官网uni-app,uniCloud,serverless,环境安装,创建uni-app,自定义模板,国内特殊情况,更新依赖到指定版本,运行、发布uni-app,运行并发布快应用,运行并发布快应用(webview),运行并发布快应用(webview)-华为,cli创建项目和HBuilderX可视化界面创https://uniapp.…

如何高效搜索?99%的人都不知道的搜索进阶小技巧

如何高效搜索任何你想要的信息? 比如怎么找第一手的行业研究报告? 在哪查高清无码的图片素材? 怎么搜最新的AI工具教程? 遇到以上问题你会怎么搜? 可能大部分人都是直接打开百度查关键词,虽然随便一搜…

数据结构复习指导之B树和B+树

目录 B树和B树 考纲内容 1.B树及其基本操作 1.1B树的查找 1.2B树的高度(磁盘存取次数) 1.3B树的插入 1.4B树的删除 2.B树的基本概念 B树和B树 考纲内容 考研大纲对 B树和 B树的要求各不相同,重点在于考查B树,不仅要求理解…

超声波清洗机哪家好用又实惠?四款好评如潮的超声波清洗机推荐

很多戴眼镜的朋友都在寻求一种既能保护眼镜光泽又能深层清洁的方法时,超声波清洗机无疑成为了许多眼镜用户的首选,可以更好清洗眼镜,从而避免眼镜的污渍而导致我们眼部出现过敏的问题。但在市场上琳琅满目的超声波清洗机中,哪些才…

[pdf,epub]《软件方法》2024版电子书共290页(202405更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 已上传本账号CSDN资源。 或者到以下链接下载: http://www.umlchina.com/url/softmeth2024.html,或点击“阅读原文”。 如果需要提取码:umlc 已排…

「浏览器」跨站请求伪造CSRF攻击的原理以及防范措施

前言 HTTP 是一个无状态的协议,比如需要账号密码登录的网站这个场景,为了避免每次都需要重复输入,有一种方案就是Cookie,具体使用不做赘述,但是这样带来了一些安全问题。跨站请求伪造(CSRF)攻击…

IMU应用于评估脊髓损伤患者的膝关节痉挛

近日,美国西北大学团队利用便携式IMU系统精确量化脊髓损伤(SCI)患者膝关节伸肌痉挛的程度,不仅验证了IMU系统的可靠性与准确性,还强调了其在动态评估痉挛变化方面的独特贡献。 研究团队创新性地将IMU技术引入到经典的…

视频智能分析平台LntonAIServer视频监控管理平台裸土检测算法的重要性与应用

随着科技的飞速发展,人工智能技术在各个领域的应用越来越广泛。其中,LntonAIServer裸土检测算法作为一种先进的技术手段,已经在农业、环境保护等领域取得了显著的成果。本文将探讨LntonAIServer裸土检测算法的重要性及其在实际应用中的优势。…

Web前端复习二(期末考试考到了一部分)

第一章测试 选项中加粗的为答案 1.图片的边框可以通过( )设定宽度。 A.width B.height C.border D.align 2.关于超链接,( )属性用于规定在何处打开链接文档。 A.href . B.target C.title D.onclick 3.( )是在新窗口打开网页文档。 A _blank B_self C_…

宏基因组+代谢之后,还能做点啥?

近期,发表在《Cell Host & Microbe》IF30.3上的论文将微生物基因与血浆和粪便代谢物联系起来,揭示了溃疡性结肠炎病程中的宿主-微生物相互作用。 文章内容要点 该研究整合了多组学方法,以识别与炎症疾病相关的微生物及其产物。 研究使用…