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

本文系统地介绍了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不适合。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容