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

2023-05-14  本文已影响0人  测试开发Kevin

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

上一篇下一篇

猜你喜欢

热点阅读