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_playwrightclass PlaywrightWrapper:def __init__(self):self.playwright = sync_playwright().start()self.browser = Noneself.page = Nonedef launch_browser(self, browser_type="chromium", headless=False):self.browser = self.playwright[browser_type].launch(headless=headless)return selfdef new_page(self):self.page = self.browser.new_page()return selfdef navigate(self, url: str):self.page.goto(url)return selfdef locator(self, selector: str):return self.page.locator(selector)def click(self, selector: str):self.locator(selector).click()return selfdef fill(self, selector: str, value: str):self.locator(selector).fill(value)return selfdef 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 pagepage.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(20)

最后,运行测试:

pytest .\test_case.py 

在这里插入图片描述

结语

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

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

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

相关文章

阿里云邮件推送配置教程:API配置的步骤?

阿里云邮件推送服务如何使用?如何配置邮件推送服务? 阿里云提供了强大的邮件推送服务,帮助企业高效地发送邮件通知、验证码、营销活动等。Aok将详细介绍阿里云邮件推送的配置教程,以及API配置的步骤,同时简要提及AokS…

[数据集][目标检测]盲道检测数据集VOC+YOLO格式2173张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2173 标注数量(xml文件个数):2173 标注数量(txt文件个数):2173 标注…

如何组织基于Sqlalchemy的项目

在使用 SQLAlchemy 构建项目时,可以遵循一些常用的组织结构和最佳实践,以确保项目清晰、易于维护。下面就是我在构建项目时遇到的一些问题,并做了详细的记录,为了方便大家学习少走一些弯路。 1、问题背景 在基于Sqlalchemy的项目…

IDEA的使用配置Maven(及selenium+webdriver的下载配置)

一. 下载maven 1. maven官网下载链接 2.​​安装第二行第一列的zip压缩包 ​​​​​​​​ 二. 配置环境变量 1.新建环境变量 2.在系统变量Path环境变量中添加%Maven_HOME%\bin 三.验证环境变量是否配置成功 winr >cmd>mvn -v 如果出现Maven的版本信息&#xff0…

Matlab解决矩阵微分方程建模(代码开源)

#用matlab解决施密特正交规范化矩阵之后,我又想到矩阵的微分方程计算量真的太大了,来回转化让我头大,于是我尝试了一下用matlab建立模型来解决这类问题。 代码部分如下:注解还挺清晰的: %%%解微分方程组%eg&#xff…

类的特殊成员函数

使用类的嵌套&#xff0c;并自定义析构函数 #include <iostream>using namespace std; class Per{ private:string name;int age;double hight;double weight; public:Per(string name,int age,double hight,double weight):name(name),age(age),hight(hight),weight(we…

图片如何修改尺寸?四种好用的修改图片尺寸方法!

图片如何修改尺寸&#xff1f;图片是一种常见的文件类型&#xff0c;它存在于什么生活的方方面面&#xff0c;虽然图片很好用&#xff0c;但是大家日常也要注意图片的尺寸&#xff0c;如果图片尺寸不对是会带来很多问题的&#xff0c;下面小编就举例说明几个问题&#xff0c;首…

Unity 自定义房间布局系统 设计与实现一个灵活的房间放置系统 ——物体占用的区域及放置点自动化

放置物体功能 效果&#xff1a; 功能&#xff1a; 自定义物体占用区域的大小一键调整占用区域调整旋转度数&#xff0c;分四个挡位&#xff1a; NoRotation&#xff1a;该物体不能调整旋转。MaximumAngle&#xff1a;每次转动90。NormalAngle&#xff1a;每次转动45&#xff…

根据租户id切换数据源

花了半天时间&#xff0c;使用spring-boot实现动态数据源&#xff0c;切换自如 在一个项目中使用多个数据源的情况很多&#xff0c;所以动态切换数据源是项目中标配的功能&#xff0c;当然网上有相关的依赖可以使用&#xff0c;比如动态数据源&#xff0c;其依赖为&#xff0c;…

探索营销系统业务架构的设计与应用

随着市场竞争的日益激烈和消费者需求的不断变化&#xff0c;营销系统作为企业营销管理的重要组成部分&#xff0c;扮演着至关重要的角色。本文将深入探讨营销系统业务架构的设计与应用&#xff0c;从客户关系管理、营销活动管理、数据分析和智能化服务等方面进行全面解析&#…

Innodb Buffer Pool缓存机制(四)预读与Mysql改进的LRU策略

一、什么是预读 InnoDB提供了预读(read ahead)。所谓预读&#xff0c;就是InnoDB认为执行当前的请求可能之后会读取某些页面&#xff0c;就预先把它们加载到Buffer Pool中。根据触发方式的不同&#xff0c;预读又可以细分为下边两种&#xff1a; 1.1 线性预读 InnoDB提供了一…

掘金AI商战宝典-高阶班:如何用AI制作视频(11节视频课)

课程下载&#xff1a;掘金AI商战宝典-高阶班&#xff1a;如何用AI制作视频(11节视频课)-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程目录&#xff1a; 1-第一讲用AI自动做视频(上)_1.mp4 2-第二讲用AI自动做视频(中)_1.mp4 3-第四讲A…

阿里云邮件推送服务配置教程:怎么做批发?

阿里云邮件推送的API配置步骤&#xff1f;配置教程有哪些步骤&#xff1f; 阿里云邮件推送服务凭借其高并发、稳定性强和安全性高等特点&#xff0c;成为众多企业的首选。Aok将详细介绍如何使用阿里云邮件推送服务进行批发配置&#xff0c;并简要提及AokSend的优势。 阿里云邮…

UE4_环境_材质函数

学习笔记&#xff0c;不喜勿喷&#xff0c;欢迎指正&#xff0c;侵权立删&#xff01; 1、建立材质函数Distance_Fun&#xff0c;勾选公开到库。 2、添加函数输入节点FunctionInput&#xff0c; 这个输入我们想作为混合材质属性BlendMaterialAttributes的alpha输入节点&#x…

手撸 串口交互命令行 及 AT应用层协议解析框架

在嵌入式系统开发中&#xff0c;命令行接口&#xff08;CLI&#xff09;和AT命令解析是常见的需求。CLI提供了方便的调试接口&#xff0c;而AT命令则常用于模块间的通信控制。本文将介绍如何手动实现一个串口交互的命令行及AT应用层协议解析框架&#xff0c;适用于FreeRTOS系统…

06Docker-Compose和微服务部署

Docker-Compose 概述 Docker Compose通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器&#xff0c;帮助我们实现多个相互关联的Docker容器的快速部署 一般一个docker-compose.yml对应完整的项目,项目中的服务和中间件对应不同的容器 Compose文件实质就…

锂电池寿命预测 | Matlab基于SSA-SVR麻雀优化支持向量回归的锂离子电池剩余寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 【锂电池剩余寿命RUL预测案例】 锂电池寿命预测 | Matlab基于SSA-SVR麻雀优化支持向量回归的锂离子电池剩余寿命预测&#xff08;完整源码和数据&#xff09; 1、提取NASA数据集的电池容量&#xff0c;以历史容量作…

【C++课程学习】:类和对象(上)(类的基础详细讲解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f35f;1.1类的引出&#xff1a; &#x1f35f;1.2类的结构&#xff1a; &#x1f35f;1.3类的…

LeetCode-82. 删除排序链表中的重复元素 II【链表 双指针】

LeetCode-82. 删除排序链表中的重复元素 II【链表 双指针】 题目描述&#xff1a;解题思路一&#xff1a;用一个cur即可实现去重cur.next cur.next.next背诵版&#xff1a;解题思路三&#xff1a;0 题目描述&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除原始…

十大排序-冒泡排序

算法原理如下&#xff1a; 给出一组数据&#xff1b;比较相邻的元素。如果第一个比第二个大&#xff0c;互换两个值。对每一组相邻元素同样方式比较&#xff0c;从开始的第一组到结束的最后一组。最后的元素会是最大数。除了排列好的最大数&#xff0c;针对所有元素重复以上步…