Playwright+Python+Pytest:基础方法二次封装简化及链式调用

引言

随着Web应用的日益复杂化,自动化测试成为了确保软件质量的关键环节。Playwright 是一个强大的自动化库,它支持在 Chromium、Firefox 和 WebKit 中运行自动化脚本。本文将介绍如何使用 Playwright 的 Python 同步 API 来简化点击和填充操作,并展示如何在 pytest 测试框架中应用这些方法。

Playwright 简介

Playwright 允许开发者自动化几乎所有的网页操作,包括但不限于点击、填写表单、导航等。它支持跨浏览器测试,并且能够处理单页应用(SPA)中的动态内容。

环境准备

在开始之前,请确保你已经安装了 Python 和 pip。

安装 Playwright

pip install playwright

安装内置浏览器

playwright install 

编写 PlaywrightWrapper 类

为了简化 Playwright 的使用,我们可以编写一个封装类 PlaywrightWrapper。这个类将提供启动浏览器、打开新页面、导航、定位元素、点击和填充表单的方法。

# wrapper.py
from playwright.sync_api import sync_playwright


class PlaywrightWrapper:
    def __init__(self):
        self.playwright = sync_playwright().start()
        self.browser = None
        self.page = None

    def launch_browser(self, browser_type="chromium", headless=False):
        self.browser = self.playwright[browser_type].launch(headless=headless)
        return self

    def new_page(self):
        self.page = self.browser.new_page()
        return self

    def navigate(self, url: str):
        self.page.goto(url)
        return self

    def locator(self, selector: str):
        return self.page.locator(selector)

    def click(self, selector: str):
        self.locator(selector).click()
        return self

    def fill(self, selector: str, value: str):
        self.locator(selector).fill(value)
        return self

    def close(self):
        if self.browser:
            self.browser.close()
        self.playwright.stop()
        return self

使用 pytest 进行测试

现在我们已经有了 PlaywrightWrapper 类,接下来我们将展示如何在 pytest 测试框架中使用它。

首先,pytest fixture 来初始化、打开页面和关闭自动化环境:

# conftest.py
import pytest
from common.wrapper import PlaywrightWrapper

# 定义page fixture
@pytest.fixture(scope="session")
def page():
    page = PlaywrightWrapper()
    yield page
    page.close()
    
# 打开页面fixture
@pytest.fixture(scope="session", autouse=True)
def open_page(page):
    page.launch_browser().new_page().navigate("https://www.baidu.com/")

然后,编写测试用例:

# test_case.py
def test_case(page):
    page.fill("input#kw", "CSDN blues_C").click("[type='submit']").click("a >> text='blues_C' >> nth=0").wait_for_timeout(10000)

最后,运行测试:

pytest .\test_case.py 

在这里插入图片描述

结语

通过封装 Playwright 的操作,我们能够编写出更简洁、更一致的自动化测试脚本。使用 pytest fixture 可以方便地管理测试环境的初始化和清理工作。这样,我们就能够专注于测试逻辑本身,而不是测试环境的搭建。

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

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

相关文章

UnityAPI学习之Animator的基本使用

动画与动画控制器 示例1: 创建Animator对动画控制器进行统一管理,在Gris中创建Animator组件,并对其中的Controller属性进行赋值 在进行动画创作前,需先将图片的Texture Type属性改为Sprite(2D and UI) 再将一系列图片拖入Gris物…

【java计算机毕设】图书商城管理系统MySQL springboot vue html maven送文档

1项目功能介绍 【java计算机毕设】图书商城管理系统 Java Spring Boot vue HTML MySQL 赠送文档 PPT 2项目简介 系统功能: 图书商城管理系统包括管理员和用户两种角色。 管理员的功能包括在个人中心修改个人信息,以及在基础数据管理中管理会员等级类型和…

idea安装步骤 激活码分享2024 最新版本 ,附激活码,亲测到2099

1.下载安装IDEA 略 一步一步确定安装,然后打开 这里提示输入激活码,先关闭应用!!! 2.下载工具 打开下载好的工具(下载后记得不要删除和移动,然后安装的路径尽量不要带中文路径、删掉就会失效…

Maven认识与学习

1. Maven介绍 1.2 初识Maven 1.2.1 什么是Maven Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 官网:Maven – Welcome to Apache Maven Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受…

正大国际期货:如何培养个好心态呢?

期货市场中的心态之道 在期货市场中,每一个交易者都像是航行在波涛汹涌的大海中的舵手。市场的波动、信息的繁杂、情绪的起伏,都如同海上的风浪,不断考验着每一位舵手的意志和心态。那么,如何在这样的环境中保持一个好的心态呢&am…

DOS 命令

Dos: Disk Operating System 磁盘操作系统, 简单说一下 windows 的目录结构。 ..\ 到上一级目录 常用的dos 命令: 查看当前目录是有什么内容 dir dir d:\abc2\test200切换到其他盘下:盘符号 cd : change directory 案例演示:切换…

LeetCode题练习与总结:二叉树中的最大路径和--124

一、题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 ro…

简单了解java中线程的使用

线程 1、线程的相关概念 1.1、并行和并发 并行:在同一时刻,有多个任务在多个CPU上同时执行 并发:在同一时刻,有多个任务在单个CPU上交替执行 1.2、进程和线程 进程:就是在多任务管理系统中,每个独立执…

1502 - JUC高并发

慢慢挣,今天比昨天更有钱,明天比今天有钱,后天比明天有钱。 0.思维导图 6.多线程锁 synchronized实现同步的基础:Java中的每一个对象都可以作为锁。 具体表现为以下3中形式 对于普通同步方法,锁是当前实例对象。对于…

go语音进阶 多任务

多任务 什么叫 多任务?简单说:就像是操作系统可以同时执行 多个任务。打个比方 你一边使用 浏览器上网,一遍在听MP3, 一边再用 word 赶作业。对于电脑来讲这就是多任务,还有很多任务悄悄的在后台同时运行着,只是桌面上…

【Ardiuno】实验使用ESP32单片机连接Wifi(图文)

ESP32单片机最为精华和有特色的地方当然是wifi连接,这里我们就写程序实验一下适使用ESP32主板连接wifi,为了简化实验我们这里只做了连接部分,其他实验在后续再继续。 由于本实验只要在串口监视器中查看结果状态即可,因此电路板上…

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载 iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoia-boot-iso/,查看最新版…

如何有效释放Docker占用的存储空间

随着Docker的广泛应用,我们经常会遇到Docker占用过多存储空间的问题。这可能是由于频繁的镜像拉取、容器创建和删除等操作导致的。本文将介绍几种方法来有效释放Docker占用的存储空间,特别是docker system prune命令的使用。 Docker的存储机制 Docker使…

springboot连接多个库

一个SpringBoot项目,同时连接两个数据库:比如一个是Mysql数据库,一个是oracle数据库(啥数据库都一样,连接两个同为oracle的数据库,或两个不同的数据库,只需要更改对应的driver-class-name和jdbc…

【C++】list 容器的增删改查---模拟实现(图例超详细解析!!!)

目录 一、前言 二、 list 容器的模拟实现思 ✨ 模块分析 ✨ 作用分析 三、list的节点类设计 四、list 的迭代器类设计 ⭐ 迭代器类--存在的意义 ⭐ 迭代器类--模拟实现 💦 模板参数 和 成员变量 💦 构造函数 💦 运算符的重载 &…

HyperBDR新版本上线,自动化容灾兼容再升级!

本次HyperBDR v5.5.0版本新增完成HCS(Huawei Cloud Stack)8.3.x和HCSO(Huawei Cloud Stack Online)自动化对接,另外还突破性完成了Oracle云(块存储模式)的自动化对接。 HyperBDR,云原生业务级别容灾工具。支…

PS教程系统17

橡皮擦工具 主要配合画笔工具来使用 选择画笔工具新建图层试验擦除线条 如果直接在背景图片上进行擦除 会有背景颜色补充 背景橡皮擦 将其白色背景擦除掉shift相关键,进行工作区域切换吸取样点一次采样、两次采样连续、不连续等功能 在进行涂擦的过程一…

Unity EasyRoads3D插件使用

一、插件介绍 描述 Unity 中的道路基础设施和参数化建模 在 Unity 中使用内置的可自定义动态交叉预制件和基于您自己导入的模型的自定义交叉预制件,直接创建独特的道路网络。 添加额外辅助对象,让你的场景栩栩如生:桥梁、安全护栏、栅栏、墙壁…

RawChatGPT:公益大模型使用网站

文章目录 一、Rawchat介绍二、使用教程三、案例应用3.1 图片内容分析3.2 生图演示3.3 文档解析 一、Rawchat介绍 RawChat为用户提供了更为便捷的使用方式。 二、使用教程 RawChat公益站点链接:https://ChatGPTplus.cn 进入后,我们只需要点击&#xf…

基于Java+Swing+mysql幼儿园信息管理系统V2

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…