高效易懂,打造维护性好的Web自动化测试框架PO模式精讲

news2024/12/23 16:30:35

目录

前言:

一、 PO概述

二、PO何实现于Web框架素自动化测试重中之重。

1.为了保证易维护性和易读性,我们可以在项目中定义一个统一的库,用来存放所有的定位器类。

2.定义一个基础的类,该类用于针对PO的元素定位进行封装。

3.基础类之后,我们就可以定义具体的PO元素了。

总结:


前言:

随着SaaS、PaaS、IaaS等“云服务”在企业中广泛应用,企业的软件开发也日益向云平台迁移。而WEB应用程序是目前最广泛使用的应用程序之一。在WEB开发中,动框架为常态封装自动框架为重要。

一、 PO概述

随着SaaS、PaaS、IaaS等“云服务”在企业中广泛应用,企业的软件开发也日益向云平台迁移。而Web应用程序是目前最广泛使用的应用程序之一。在Web开发中,自动化测试框架成为常态,其中封装的自动化框架最为重要,这篇文章将介绍如何针对表现层的PO元素进行自动化定位。

Page Object模式是一种常用的自动化测试框架模式,目的是将Web页面抽象为一个对象,将业务流程功能尽量细分,避免冗余代码逻辑。同时,也为自动化测试提供了更好的可维护性、代码复用性。Page Object就是用来描述页面上的行为和数据,并封装为一个对象的。

在Page Object模式中,一个页面包含许多元素,如输入框、按钮、复选框等,我们把这些元素抽象为一个个组件,每个组件对应着页面中的一个元素。将用户在页面上的操作拆分为一个个组件,便于代码组织和代码复用。

由此可以看出,PageObject模式有两个核心点:

1.把页面上的每一个页面元素抽象出来,封装为一些方法(组件);
2.让测试用例去调用这些方法(组件),实现Web自动化测试。

二、PO何实现于Web框架素自动化测试重中之重。

在Selenium WebDriver中,元素定位有8种方式,分别是classname、css selector、id、link text、name、partial link text、tag name和xpath。

在进行页面元素自动定位时,需要考虑以下几个因素:

1.易维护性:代码逻辑精简,方便后期维护。
2.易读性:在写代码时,尽量保持代码的易读性,让代码可读性更好,便于后续修改。
3.鲁棒性:尽可能避免页面元素的变化带来的测试用例失败,降低维护成本。

基于这几个因素,我们可以封装一些方法来满足PO模式。具体步骤如下:

1.为了保证易维护性和易读性,我们可以在项目中定义一个统一的库,用来存放所有的定位器类。

例如:

class LoginPageLocators:



    # 名称输入框定位器
    USERNAME_INPUT_LOC = ('id', 'username')

    # 密码输入框定位器
    PASSWORD_INPUT_LOC = ('id', 'password')

    # 登录按钮定位器
    LOGIN_BUTTON_LOC = ('xpath', '//*[@id="login-btn"]')

2.定义一个基础的类,该类用于针对PO的元素定位进行封装。

例如:

class BasePageElements:



    locator = None # 元素定位器

    def __init__(self, driver: WebDriver):
        self.driver = driver # 初始化浏览器驱动
        self.element = None

    def find(self, wait_time=5):
        """元素查找"""
        WebDriverWait(self.driver, wait_time).until(
            EC.presence_of_element_located(self.locator))
        self.element = self.driver.find_element(*self.locator)
        return self.element

    def click(self):
        """元素点击"""
        self.find().click()

    def send_keys(self, value):
        """元素输入"""
        self.find().send_keys(value)

    def get_text(self):
        """获取元素文本"""
        return self.find().text

3.基础类之后,我们就可以定义具体的PO元素了。

例如:

class UsernameInput(BasePageElements):
    locator = LoginPageLocators.USERNAME_INPUT_LOC


class PasswordInput(BasePageElements):
    locator = LoginPageLocators.PASSWORD_INPUT_LOC


class LoginButton(BasePageElements):
    locator = LoginPageLocators.LOGIN_BUTTON_LOC

在具体实现时,我们只需要在测试用例中引入这些类即可。

例如:

class TestLogin:



    def setup_method(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(20)
        self.login_page = LoginPage(self.driver)
        self.login_page.open()

    def test_login(self):
        username_input = UsernameInput(self.driver)
        password
_input = PasswordInput(self.driver)
        login_button = LoginButton(self.driver)
        username_input.send_keys('example')
        password_input.send_keys('password')
        login_button.click()

在上述代码中,我们先初始化驱动对象,然后实例化LoginPage对象,并打开登录页面。接着我们通过实例化一个元素对象,来使用自定义的方法进行定位和操作。完成登录操作后,我们可以在测试用例中进行断言,以判断登录模块的正确性。

总结:

在这篇文章中,我们对PO模式进行了简单的介绍,并针对PO元素的自动定位进行了封装。以此来满足易维护、易读、鲁棒的原则,提高Web自动化测试的可靠性和可维护性。

作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试的学习资源,如果你用得到的话可以直接拿走,希望能对你带来帮助。(包括Python编程、WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、性能测试、安全测试、大厂面试真题、简历模板等等),相信能使你更好的进步!

获取方式:留言【自动化测试学习】即可免费获取

【自动化测试交流】:574737577(进群备注ccc)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=5Yy1aF4jOfrqXFA_eg14oG9EZ5fFbv5A&authKey=zYx3Zivwu55NOCM%2B%2BKqaZjoeTRS5xMdAmfqX%2FyzUm4lvrD4q75P5Ukeg%2FPBRMMbm&noverify=0&group_code=574737577

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

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

相关文章

Visual Studio 2022 17.7 发布首个预览版

Visual Studio 2022 17.7 已发布首个预览版,这个版本有大量社区贡献的新改进,主要改动如下: 生产效率 文件对比功能,可以在 Solution Explorer 中对比不同的文件差异。在资源管理器中右键单击一个文件,然后使用上下文…

Java 中 Token 是什么,有哪些用途

简介 Token 是一种身份验证机制,通常由服务器生成并返回给客户端,客户端在后续的请求中携带 Token,以证明自己的身份。在 Java 中,Token 的应用场景非常广泛,例如用户登录、API 认证、OAuth 授权等等。 在用户登录的…

Hash索引和B+树

Hash索引和B树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据。B树底层实现是多路平衡查…

晨控CK-GW208-EC与欧姆龙PLC工业EtherCAT协议通讯指南

晨控CK-GW208-EC与欧姆龙PLC工业EtherCAT协议通讯指南 EtherCAT 是一种实时以太网络通讯协议,旨在解决传统现场总线系统在数据传输速率和复杂性方面的限制。相比传统现场总线,EtherCAT 的数据传输速率有了极大的提升,同时,EtherC…

借《2023年Q1TikTok电商带货达人趋势分析报告》教你分析TikTok数据报告

现今TikTok的电商业务正进入爆发期。在众多跨境电商的商业营销中,许多商家把TikTok作为重点选择的平台,期望能搭上这波海外流量红利的巨轮。TikTok营销正越来越受商家青睐和使用。那么作为TikTok电商商家,该如何挑选高匹配、高ROI的带货达人&…

公司招了一个00后,以为是个小年轻,没想到人家是个卷王...

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资也不低,面试的人很多,但平均水平很让人失望。 令我印象最深的是一个00后测试员,…

基于αβ剪枝算法的五子棋

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上&#xf…

Husky + lint-staged + ESlint + Prettier(可选) 实现git增量代码lint校验

工具介绍 Husky lint-staged ESlint Prettier(可选) 实现git增量代码lint校验 Husky:一个为 git 客户端增加 hook 的工具,它有一些钩子函数,比如pre-commit、 pre-push等lint-staged: 一个过滤出 git 代码暂存区文件的工具,在…

防火墙NAT策略中各项之间以及策略与策略之间的关系

实验结论 将实验结论写在前面方便大家直接查看 1、NAT策略中rule与rule之间的关系为“或”的关系,即多个rule存在时,流量只需要匹配其中一个rule即可,流量会按照匹配的rule规则进行流量转发。(华为华三的防火墙rule是没有ID的&a…

都说今年软件测试炸了,到底炸到什么程度呢?

软件测试薪资“乱”了 随着互联网行业的发展,每年都有有数以万计的求职者推开软件测试的大门,软件测试从业人员数逐年递增,市场对于软件测试人员的要求也越来越高,所以很多的初级测试人员找不到工作,导致了都在说软件…

十年软件测试工程师感悟,写给想要转行的软件测试新人

作为一个30岁并且奋战在测试一线的测试员,被人无数次问到这个问题,也回答过无数次。 刚看到知乎上的一个问题:程序员真的干到35岁就干不动了吗?想到在测试行业真的干到35就干不动了吗?软件测试能做到多少岁?也有很多…

idea插件完成junit代码生成,和springboot代码示例

在idea环境下,可以用过插件的方式自动生成juint模板代码。不过具体要需要自己手动编写。 1、安装插件 打开idea,file–settings–plugins,搜索和安装插件(JunitGenerator V2.0和JUnit),安装后,后…

如何解决企业数字化焦虑?

数据是一种宝贵的战略资源,其潜在价值和增长速度正在改变着人类的工作、生活和思维方式。在未来,各行各业都会积极拥抱大数据,积极探索数据挖掘和分析的新技术、新方法,从而更好地利用大数据。海量的数据规模、快速的数据流转、动…

蜂窝空间两点最短路径的Python实现

昨天和Mcree来一场痛快淋漓的头脑风暴​! 叶子为什么是绿色的? 聊起一步步到物理是如何接过生物学家的接力棒深入探索:​参考链接:​为什么植物是绿色的?为了减少光合作用中的噪音 为什么眼睛能看到绿叶​?有没有存在…

Hadoop基础学习---1、大数据概论

1、大数据概念 大数据:指无法在一段时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 大数据主要解决,海量数据的采集、存储…

本地git仓库(gitea)与openssh-server的冲突(connection reset by ip port 22)

前提 之前在本地的windows电脑上安装了一个gitea供项目组成员使用。 期间为了在windows电脑上使用scp拷贝文件,离线安装过一个openssh。 冲突 发现无法pull/clone gitea上的仓库了,提示 connection reset by ip port 22 fatal: Could not read from r…

基于K8sSVC springboot 服务间调用

公司项目私有化部署,甲方要求服务间调用使用K8sSVC完成服务间调用。需要把原有基于springbootnacos 服务注册发现改造为k8ssvc完成服务间注册发现。 首先了解一下k8s svc: K8S核心概念之SVC(易混淆难理解知识点总结)_k8s svc_倾…

LVGL v8.2移植到IMX6ULL开发板

本文介绍嵌入式轻量化图形库LVGL 8.2移植到Linux开发板IMX6ULL的步骤。 文章目录 LVGL简介移植LVGL的硬件条件移植准备1. 源码下载2. 驱动加载 移植过程源码修改1. 修改lv_conf.h2. 修改lv_drv_conf.h3. 修改main.c文件4. 修改Makefile文件 源码编译效果演示 LVGL简介 LVGL最初…

内网渗透之权限维持-自启动映像劫持粘滞键辅助屏保后门WinLogon

0x01权限维持-自启动 以下几种方法都需服务器重启 1、自启动路径加载 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 将木马放到此目录,等待服务器重启即可 2、自启动服务加载 sc create ServiceTest binPath C:\1.exe …

上门家教预约小程序开发 良师就在你身边

社会的发展科技的进步让人们对教育的重视度也逐渐升高,很多家长可以说是为了孩子的教育操碎了心。在学校还好有老师辅导,节假日在家的时候,很多家长自己本身文化知识有限或者工作繁忙没有时间辅导,送去辅导班来回接送又很麻烦&…