基于POM模式应用Playwright进行自动化测试

news2024/12/23 22:09:07

下方查看历史精选文章

重磅发布 - 自动化框架基础指南pdfv1.1
大数据测试过程、策略及挑战

测试框架原理,构建成功的基石

在自动化测试工作之前,你应该知道的10条建议

在自动化测试中,重要的不是工具

前言

在现代软件开发中,自动化测试已经成为了一项必备的技能。随着前端技术的发展,Web应用程序也变得越来越复杂,测试的工作也变得越来越繁琐和耗时。Playwright是一个新兴的自动化测试工具,它可以帮助我们更快地完成测试工作,提高测试效率。

在本文中,我们将介绍如何使用Python和Page Object Model(POM)模式来编写Playwright自动化测试代码。我们将通过一个实例来演示如何使用Playwright和POM模式来测试一个Web应用程序。

准备工作

在开始之前,我们需要安装以下软件:

  • Python 3.x

  • Playwright

  • Visual Studio Code

POM模式

POM模式是一种设计模式,用于将页面的表示(如HTML元素)与代码的表示(如Python代码)分离开来。它将页面分解为多个小部件,并为每个小部件创建一个单独的类。这些类称为“页面对象”。

POM模式的优点在于它可以使代码更容易理解和维护。当页面发生变化时,只需要更新相关的页面对象,而不需要修改测试代码。

Playwright

Playwright是一个由Microsoft发布的自动化测试工具,它可以模拟用户在浏览器中的行为,例如点击、输入和导航。它支持多种浏览器,包括Chrome、Firefox和Safari。

Playwright还提供了一些高级功能,例如录制和回放测试、截图和视频录制等。在本文中,我们将使用Playwright来模拟用户在Web应用程序中的操作。

实例

我们将测试一个简单的Web应用程序,该应用程序具有以下功能:

  • 在登录页面上输入用户名和密码并登录

  • 转到主页并验证页面标题

  • 点击链接并验证页面标题

我们将使用Python和POM模式来编写测试代码。我们将把页面分解为多个小部件,并为每个小部件创建一个单独的类。然后,我们将编写测试代码,以模拟用户在Web应用程序中的操作。

创建页面对象

首先,我们需要为每个页面元素创建一个单独的类。在本例中,我们将创建一个名为LoginPage的类来表示登录页面,一个名为HomePage的类来表示主页。

# LoginPage.py
from playwright.sync_api import Playwright, Page


class LoginPage:
    def __init__(self, page: Page):
        self.page = page


    def login(self, username: str, password: str):
        self.page.fill('#username', username)
        self.page.fill('#password', password)
        self.page.click('#login-button')


# HomePage.py
from playwright.sync_api import Playwright, Page


class HomePage:
    def __init__(self, page: Page):
        self.page = page


    def verify_title(self):
        assert self.page.title() == 'Home'


    def click_link(self):
        self.page.click('#link')

我们可以看到,每个类都有一个构造函数,它接受一个名为“page”的参数。这是Playwright提供的一个Page对象,它表示当前页面。我们可以使用该对象来访问页面元素和执行操作。

编写测试代码

现在,我们已经创建了页面对象,我们可以编写测试代码来测试我们的Web应用程序。在本例中,我们将编写一个名为“test_login”的测试函数,以测试登录功能。

# test.py
from playwright.sync_api import Playwright, PlaywrightContext, Page
from LoginPage import LoginPage
from HomePage import HomePage


def test_login(playwright: Playwright, context: PlaywrightContext):
    # Launch the browser
    browser = playwright.chromium.launch(headless=False)


    # Create a new page
    page = browser.new_page()


    # Navigate to the login page
    page.goto('https://example.com/login')


    # Create a new LoginPage object
    login_page = LoginPage(page)


    # Login
    login_page.login('username', 'password')


    # Verify that we are on the home page
    home_page = HomePage(page)
    home_page.verify_title()


    # Click the link and verify the title
    home_page.click_link()
    assert page.title() == 'Link Page'


    # Close the browser
    browser.close()

我们可以看到,测试代码非常简单。我们使用Playwright创建了一个新的浏览器窗口,并使用Page对象导航到登录页面。然后,我们创建了一个LoginPage对象并调用了其login方法,以输入用户名和密码并登录。接下来,我们创建了一个HomePage对象并验证了页面标题。最后,我们点击链接并验证了页面标题。最后,我们关闭了浏览器。

运行测试

现在,我们已经编写了测试代码,我们可以运行它来测试我们的Web应用程序。在终端中,我们可以使用以下命令来运行测试:

$ python -m playwright install
$ python -m pytest test.py

我们可以看到,测试运行成功,并输出了测试结果。

结论

在本文中,我们介绍了如何使用Python和POM模式来编写Playwright自动化测试代码。我们演示了如何将页面分解为多个小部件,并为每个小部件创建一个单独的类。然后,我们编写了测试代码,以模拟用户在Web应用程序中的操作。最后,我们运行了测试,并验证了测试结果。

Playwright是一个非常强大的自动化测试工具,可以帮助我们更快地完成测试工作,提高测试效率。使用Python和POM模式来编写Playwright自动化测试代码可以使代码更容易理解和维护。

e99b7694af2bd8a1d45092d8d42bfa6a.jpeg

0b35b570dfc047c135a2385412654f85.png

微信搜一搜 或 长按加群

ecdf07c0223212d7a35d5a11009213d4.png

开源优测

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

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

相关文章

【Linux】Centos安装Redis数据库并内网穿透远程连接

文章目录 前言1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 前言 Redis作为一款高速缓存的key value键值对的…

springboot+jsp家政预约服务管理系统

智慧家政在线预约管理系统为用户提供家政服务预约服务,系统包括前台和后台。 前台用户可以先进行注册,填写个人的基本信息提交到服务器,服务器把数据保存到数据库。管理员对会员的信息进行验证后,会员通过验证后的用户名和密码进行…

vlc搭建rtsp直播Demo ffmpeg + nginx + flv.js实现rtsp网页播放Demo

文章目录 学习链接本地视频文件作为数据源推流步骤拉流步骤 本地摄像头作为数据源拉流步骤 vlc ffmpeg nginx flv.js 实现网页视频直播概括vlc打开摄像头,提供rtsp视频流nginx配置http-flv.conf的nginx配置文件 ffmpeg将rtsp视频流转为rtmp,推送给ngi…

硬文:为什么中本聪不给比特币设计最终性?

* * * 原创:刘教链 * * * 昨日刘教链公众号刊发原创文章《论比特币和以太坊的“宕机”》之后,引发了一些对区块链工作原理感兴趣的朋友的热烈讨论。其中,魔笛手社区群主Claire提了一个好问题:为什么中本聪不给比特币设计最终性&a…

Babylon.js实战WebXR/元宇宙

从 VR 音频实验到街机上的 VR 休闲游戏,再到使用 AR 或 VR 创建新协作方式的更严肃用途,阅读本文后,你应该对今天可以做什么有很好的了解。 事实上,在本文中,我将分享我一直致力于使用 Babylon.js 构建沉浸式或增强现…

Towards Open-Set Object Detection and Discovery(论文翻译)

Towards Open-Set Object Detection and Discovery 摘要 随着人类对知识的不断追求,开集目标检测(OSOD)被设计用于识别动态世界中的未知目标。然而,当前设置的一个问题是,所有预测的未知对象共享相同的类别为“未知”…

Kali-linux使用Metasploitable操作系统

Metasploitable是一款基于Ubuntu Linux的操作系统。该系统是一个虚拟机文件,从http://sourceforge.net/projects/metasploitable/files/Metasploitable2/网站下载解压之后可以直接使用,无需安装。由于基于Ubuntu,所以Metasploitable使用起来十…

卧龙、凤雏!两源码学得一,代码质量都不会差!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 有人问我,编程能力怎么提升,我说学源码学的。他有问我,是不学 Spring 源码比学 MyBatis 更好…

ESP32 event loop(事件循环)(17)

提示:本博客作为学习笔记,有错误的地方希望指正,主要参考乐鑫技术手册说明结合实例代码分析,结合理论知识学习后示例分析以及常见问题说明。 文章目录 一、ESP32 Event Loop 概述2、使用 esp_event APIs3、默认 event loop4、句柄…

Java进阶-面向对象进阶(抽象类接口内部类)

1 抽象类 1.1 概述 1.1.1 抽象类引入 ​ 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话…

Marvin - LLM驱动的AI函数开发包【Python】

Marvin是一个用于构建 AI 驱动软件的Python库。 Marvin 的工作是将 AI 直接集成到你的代码库中,使其看起来和感觉起来与任何其他功能一样。 Marvin 引入了一个新概念,称为 AI 函数(AI functions)。 AI函数与传统函数的不同之处在…

Java进阶-常用的API

1 Math类 1.1 概述 tips:了解内容 查看API文档,我们可以看到API文档中关于Math类的定义如下: Math类所在包为java.lang包,因此在使用的时候不需要进行导包。并且Math类被final修饰了,因此该类是不能被继承的。 Math类…

springboot+jsp超市库存进销存管理系统-a597o

Spring框架是Java平台的一个开放源代码的Full-stack(全栈)应用程序框架,和控制翻转容器的实现。Spring框架的一些核心功能理论,可以用于所有Java应用,Spring还为Java EE构建的Web应用提供大量的扩展支持。Spring框架没有实现任何的编程模型&a…

PHP生成带有雪花背景的验证码

<?session_start();?> <FORM METHOD=POST ACTION=""> <input type=text name=number maxlength=4><img src="YanZhengMa.php?act=init"> <INPUT TYPE="submit" name="sub"> </FORM><?//检…

【分布族谱】正态分布和二项分布的关系

文章目录 正态分布二项分布验证 正态分布 正态分布&#xff0c;最早由棣莫弗在二项分布的渐近公式中得到&#xff0c;而真正奠定其地位的&#xff0c;应是高斯对测量误差的研究&#xff0c;故而又称Gauss分布。测量是人类定量认识自然界的基础&#xff0c;测量误差的普遍性&am…

本地电脑做服务器搭建私人音乐网站ThinkMusic + cpolar内网穿透

文章目录 1. 前言2. 本地网页搭建2.1 环境使用2.2 支持组建选择 3. 网页安装3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDN lisacpolar的文章&#xff1a;ThinkMusic源码搭建音乐网站&#xff0c;并实现公网访问 1. 前言 在我们的日…

数据结构初阶(1)(一些学习数据结构所需掌握的先导知识:包装类、装箱与拆箱、泛型【泛型的编译——擦除机制、泛型的上界、泛型方法、裸类型】、List简介)

目录 包装类 基本数据类型&#xff08;Primitive Types&#xff09;&#xff1a; 包装类&#xff08;Wrapper Classes&#xff09;&#xff1a; 装箱和拆箱 自动装箱和自动拆箱 泛型 泛型的编译——很重要的擦除机制&#xff1a; 泛型的上界&#xff1a; 泛型方法&…

LC-1335. 工作计划的最低难度(区间DP、记忆化搜索==>动态规划)

1335. 工作计划的最低难度 难度困难97 你需要制定一份 d 天的工作计划表。工作之间存在依赖&#xff0c;要想执行第 i 项工作&#xff0c;你必须完成全部 j 项工作&#xff08; 0 < j < i&#xff09;。 你每天 至少 需要完成一项任务。工作计划的总难度是这 d 天每一…

JavaSE进阶(一)—— 面向对象进阶(static、单例、代码块、继承)

目录 一、static静态关键字 1. static是什么&#xff0c;static修饰成员变量的用法 2. 成员方法的分类 2.1 使用场景 3. static修饰成员方法的内存原理 4. static的注意事项[拓展] 二、static应用知识&#xff1a;工具类 1. 工具类是什么 2. 工具类的好处 3. 为什么工…

域名信息收集

被动信息收集 0x01 Certificate Transparency&#xff08;证书透明&#xff09; 证书透明度(Certificate Transparency)是证书授权机构的一个项目&#xff0c;证书授权机构会将每个SSL/TLS证书发布到公共日志中。一个SSL/TLS证书通常包含域名、子域名和邮件地址。查找某个域名…