想要上手playwright?看这篇文章就够了!(文章有点长,建议收藏)

news2025/1/19 11:36:49

本文系统地介绍了playwright的基础概念,架构,安装过程,编码demo(python实例),常用API,录制脚本的方法以及playwright在无头模式的应用和其与selenium的对比。相信大家认真阅读本文后一定会对playwright有一个概括的认识,并可以编写自动化测试脚本在实际工作中进行应用,文章较长建议收藏多读几遍!

概述

playwright是由微软开发的Web UI自动化测试工具, 支持的浏览器包括:Chromium, Firefox and WebKit,支持的编码语言包括:Node.js、Python、C# 和 Java语言。

官网https://playwright.dev/

playwright具有以下特点:

一、支持所有主流浏览器并跨平台

支持所有主流浏览器:基于Chromium内核的Google Chrome 和 Microsoft Edge浏览器), WebKit内核的Apple Safari 和 Mozilla Firefox浏览器,不支持IE11。

跨平台:Windows、Linux 和macOS

可用于模拟移动端WEB应用的测试,不支持在真机上测试。

支持无头模式(默认)和有头模式

二、快速可靠的执行

自动等待元素

Playwright基于Websocket协议,可以接受浏览器(服务端)的信号

浏览器上下文并行:单个浏览器实例下创建多个浏览器上下文,每个浏览器上下文可以处理多个页面。

有弹性的元素选择:可以使用文本、可访问标签选择元素。

架构

如下图所示

 

具体解释:

client:在客户端是我们用不同的编程语言编写的代码,如JavaScript,Java,Python,C#等。

server:Playwright的server通过nodejs构建并负责与client 以及不同的 Web 浏览器引擎进行通信。

通信协议:client通过WebSocket 协议与Playwright server 通信;

Playwright使用 Chrome DevTools 协议 (CDP) 与 Chromium 通信。对于Firefox和WebKit,Playwright实现了自己的协议,类似于CDP。一旦触发测试,client端代码将被转换为JSON格式,然后使用websocket 协议发送到服务器。palywright通过单个 websocket 协议连接传达所有请求,该连接将保持不变,直到所有测试执行完成。由于命令是在单个连接上发送的,因此测试失败或不稳定的可能性较小,并且命令可以快速执行。这种架构与Selenium相反,Selenium使用HTTP连接协议,并将每个命令(如浏览器打开,单击,发送密钥或关闭浏览器)作为单独的HTTP请求发送。此外,在Selenium中,服务器和客户端之间的连接将在每次请求后终止,并为下一个请求重新建立。最后划重点:这就是Playwright比selenium快的原因!

安装

我们以python为例,python版本需要3.7+

pip install playwright

playwright install

pip install msvc-runtime

备注:如果是java编码,需要通过maven构建,pom.xml如下

<dependency>

<groupId>com.microsoft.playwright</groupId>

<artifactId>playwright</artifactId>

<version>1.28.1</version>

</dependency>

基础编码

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(channel="chrome", headless=False)
 page = browser.new_page()
 page.goto("http://www.baidu.com")
print(page.title())
 browser.close()

无头模式

Playwright 默认是使用无头模式,在上面的代码中如果修改为

browser = p.chromium.launch(channel="chrome")

大家运行代码时会发现:脚本依然会运行,但是测试全程并没有启动浏览器。

无头浏览器,即 Headless Browser,是一种没有界面的浏览器。它拥有完整的浏览器内核,包括 JavaScript 解析引擎、渲染引擎等。与普通浏览器最大的不同是,无头浏览器执行过程中看不到运行的界面,但是我们依然可以用 GUI 测试框架的截图功能截取它执行中的页面。

无头浏览器的主要应用场景

无头浏览器主要应用在: GUI 自动化测试、页面监控、网络爬虫以及没有桌面的linux系统中。在这里我们重点说一下 GUI 自动化测试,在 GUI 测试过程中,使用无头浏览器的好处主要体现在以下几个方面:

  • 测试执行速度更快。 无头浏览器无需加载 CSS 以及渲染页面,在测试用例的执行速度上有很大的优势,个人觉得适合在接口测试中通过页面造数据或者删数据的场景。
  • 减少对测试执行的干扰。 可以减少操作系统以及其他软件(比如杀毒软件等)不可预期的弹出框,对浏览器测试的干扰。
  • 一台机器上同时运行不同厂商的无头浏览器(无头浏览器占用内存资源,要比正常浏览器小),实现测试用例的并发执行。

无头浏览器缺点

1. 不能完全模拟真实的用户行为

2. 不便于调试(各个浏览器的开发者工具)

主流的无头浏览器概述

Chrome Headless,Chrome从59版本开始支持

Firefox Headless,Firefox从56版本开始支持

PhantomJS,使用JavaScript编写的无头浏览器,能够支持Windows, macOS, Linux

Splash,使用Python编写的无头浏览器,使用WebKit作为引擎

HtmlUnit,使用Java编写的无头浏览器,使用Rhino engine作为引擎

录制脚本

Playwright可以使用codegen来录制脚本,使用方式非常简单,只要大家玩过ui自动化测试的录制相关工具三分钟就可以学会上手!

使用命令

playwright codegen https://www.baidu.com/

会启动浏览器页面,然后识别页面中的元素,并记录操作过程

 

操作的过程会通过playwright Inspector记录,这就是自动化测试中的录制工具,相信做过自动化测试的同学都会懂

使用命令

playwright codegen --target python -o baidu_test.py -b chromium https://www.baidu.com/

会把我们在浏览器中的操作脚本化并保存到baidu_test.py中

常用API

大家可以相关文档查看api

https://playwright.bootcss.com/python/docs/intro

  • 识别元素

page.get_by_role()通过显式和隐式可访问性属性定位。

page.get_by_text()按文本内容定位。

page.get_by_label()通过关联标签的文本查找表单控件。

page.get_by_placeholder()按占位符查找输入。

page.get_by_alt_text()通过其文本替代品定位元素,通常是图像。

page.get_by_title()通过标题属性定位元素。

page.get_by_test_id()根据其data-testid属性定位元素(可以配置其他属性)。

playwright除了上述定位方式,还支持selenium的8种by元素定位,id、xpath、css等等,另外还有W3C标准规定的webDriver协议为5种定位方式

CSS、Link text、Partial link text、Tag name、XPath

playwright把这些定位归类成3种,分别是:css、xpath、text

  • 定位器的断言操作

https://playwright.dev/python/docs/api/class-locatorassertions

  • 判断元素状态

is_checked

is_disabled

is_editable

is_enabled

is_hidden

is_visible

  • 操控元素

写相关操作:clear、fill

点击:click、dbclick

下拉选择框:select_option

文件上传:set_input_files

鼠标拖动:down、up、move、wheel

触摸屏幕:tap

键盘按键:press

截屏:screenshot

页面切换expect_popup

执行js:evaluate

更多操作请参考

https://playwright.dev/python/docs/next/api/class-locator#locator-fill

playwright与selenium对比

我初步学习了Playwright之后,第一感受是Playwright就是来对标selenium的,这是在网上找到的二者对比列表

 

总体感受是:

优点:

比selnium执行速度快

缺点

与Selenium相比,Playwright没有一个很大的社区;

它不适用于旧版浏览器和设备,如果项目需要在比较旧的浏览器上运行,那么Playwright不适合。

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

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

相关文章

2023年5月广州/西安/成都/深圳产品经理认证NPDP报名

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

【数据结构】从头到尾全解析双向链表

在之前我们已经讲过< 单链表 >了,单链表查找上一个结点的时间复杂度为O&#xff08;n&#xff09;&#xff0c;尾插时也要遍历一次链表也是O&#xff08;n&#xff09;&#xff0c;因为我们每次都要从头开始遍历找,为了克服这单向性的缺点&#xff0c;我们就有了双向链表…

软件测试专业应届生应如何提高职场竞争力

一&#xff1a;巩固专业知识 背景&#xff1a;笔者已经做了几年的打工人&#xff0c;以个人经验给软件测试专业应届生一些建议。 推荐需要掌握的知识&#xff1a; 1、软件测试基础知识&#xff08;软件生命周期每个阶段工作需了解&#xff09; 2、熟悉SQL/MySQL/Oracle数据库&…

D8加密狗使用教程

D8 加密锁 1.VsCode 安装中文扩展包(1) 打开 VsCode&#xff0c;点击左侧扩展.(2) 输入Chinese&#xff0c;会自动搜索&#xff0c;点击第一个中文简体扩展&#xff0c;点击安装(3) 重启VsCode 2. D8调试服务程序 - 只运行3. 自动安装 yttool&#xff08;1&#xff09;VsCode 打…

杭钢集团:以用友iuap为数智底座的数智化转型之路

近日&#xff0c;一年一度的用友BIP技术大会圆满召开。来自行业领先企业的CIO/CDO、生态伙伴、开发者、分析师、媒体等共聚北京用友产业园&#xff0c;了解最新技术发展趋势、探讨行业热点话题。会上&#xff0c;杭钢集团总经理助理施永益分享了杭钢集团基于用友BIP-iuap平台推…

three.js学习 11 - threejs常用几何体,与几何体材质如何自定义

1.缓冲几何体&#xff08;立方体&#xff09; 官网API地址&#xff1a;https://www.three3d.cn/docs/index.html?qgeometry#api/zh/geometries/BoxGeometry 2.圆缓冲几何体 官网地址&#xff1a;https://www.three3d.cn/docs/index.html?qgeometry#api/zh/geometries/Cir…

ppt怎么压缩文件大小?试试这几种方法

ppt怎么压缩文件大小&#xff1f; PPT&#xff0c;也就是Microsoft PowerPoint演示文稿&#xff0c;是一种用于创建和展示演示文稿的软件工具。PPT的作用非常广泛。它可以用于各种场景中&#xff0c;以呈现信息、表达观点和传递思想。PPT可以将文字、图片、图表、动画等多种媒体…

程序员之间拉开差距最大的因素

本文为小红花技术领袖俱乐部创始人赖勇浩为《编程卓越之道》&#xff08;卷1&#xff09;所作序言。 拿到新一版《编程卓越之道》的第一卷《深入理解计算机》的稿子&#xff0c;心里非常感慨&#xff1a;上次读这本书&#xff0c;已经是16年前&#xff0c;还留下了幼稚的读后感…

1072. 按列翻转得到最大值等行数(leetcode,哈希)-------------------c++实现

1072. 按列翻转得到最大值等行数&#xff08;leetcode,哈希&#xff09;-------------------c实现 题目表述 给定 m x n 矩阵 matrix 。 你可以从中选出任意数量的列并翻转其上的 每个 单元格。&#xff08;即翻转后&#xff0c;单元格的值从 0 变成 1&#xff0c;或者从 1 …

排序算法之基数排序

一、基数排序&#xff08;RadixSort&#xff09; 基数排序&#xff08;Radix sort&#xff09;是一种非比较型整数排序算法。 1. 基本思想 原理是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。基数排序的方式可以采用LSD&#xff08;Least significant…

超详细:阿里云服务器安装宝塔面板教程(需要开端口)

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账号和密码…

理论力学专题----拉普拉斯一龙格一楞次矢量

质量 m平方反比的有心力场 对应势能 V-k/r牛顿定律&#xff1a;\dot{\vec{p}}-k\frac{\vec{r}}{r^3} 空间旋转对称群 略 下学期学完了补上 LRL矢量 LRL矢量\vec{A}: define: \vec{A} \eqv \vec{p} \times \vec{L} - mk\frac{\vec{r}}{r} LRL守恒 \frac{d}{dt}(\vec{p} \…

图神经网络:(节点分类)在Cora数据集上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 代码实操1&#xff1a;GCN的复杂实现代码实操2&#xff1a;GCN的简单实现…

从零开始Vue3+Element Plus的后台管理系统(二)——Layout页面布局的实现

项目搭建好之后&#xff0c;开始写基本的布局。后台管理系统的布局3大元素&#xff1a;头部、侧栏、主要内容&#xff0c;各种布局结构相差不大&#xff0c;我选择了下图所示的布局&#xff0c;其中头部、侧栏、页签在页面中是固定的&#xff0c;只有主要内容容器会跟随页面滚动…

如何从计算机或 SD 卡中恢复已删除的音乐文件?

与我们中的许多人一样&#xff0c;您可能已经从喜爱的专辑中下载并保存了多个音乐文件以供离线收听&#xff0c;但如果您不小心或意外删除了这些音乐文件怎么办&#xff1f;不用担心&#xff0c;我们在这里列出了几种从计算机或 SD 卡中恢复已删除或丢失的音乐文件的方法。 您…

001+limou+Git的安装与入门

0.前言 您好&#xff0c;这里是limou3434的一篇个人博文&#xff0c;感兴趣的话您也可以看看我的其他文章。本系列主要深入讲解有关Git的基础知识和基础使用&#xff0c;在文章中会结合部分Git网站上推荐的电子书《Pro Git》来对Git进行解读&#xff0c;意在补充书中对您“不友…

Java 面试 | RabbitMQ(2023版)

文章目录 rabbitmq1、为什么要使用rabbitmq2、rabbitmq如何确保消息发送?消息接收?3、RabbitMQ的构造4、Exchange交换器的类型5、RabbitMQ的持久化6、RabbitMQ消息发送和接收过程7、如何保证消息队列的高可用8、如何处理消息丢失的情况9、如何保证消息没有重复消费10、如何保…

Shell系统编程三剑客之----sed编辑器

目录 一:sed编辑器 1.sed编辑器概述 2.sed的工作流程 3.sed的命令格式 4.常用选项 5.常用操作 二&#xff1a;sed操作事例 1.查询 &#xff08;1&#xff09;打印内容 ​&#xff08;2&#xff09;打印行数 ​&#xff08;3&#xff09;打印特殊字符、ASCII码 &…

python爬虫简述

Python爬虫是一种自动化获取互联网数据的技术&#xff0c;它可以通过编写程序自动访问网站并抓取所需的数据。在本文中&#xff0c;我们将介绍Python爬虫的基础知识、常用库和实际应用。 一、Python爬虫的基础知识 爬虫的定义 爬虫是一种自动化获取互联网数据的技术&#xf…

屏幕录像怎么录?分享3个简单实用的方法!

案例&#xff1a;怎么录制电脑屏幕&#xff1f; 【对于我这种不太熟悉电脑的人来说&#xff0c;想要录制电脑屏幕十分困难。听说录制电脑屏幕&#xff0c;需要用到录屏工具。有没有小伙伴有好的录屏软件介绍&#xff0c;顺便附带一下教程&#xff01;求&#xff01;】 屏幕录…