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

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

作者: 测试开发Kevin | 来源:发表于2023-05-14 13:47 被阅读0次

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/zddpsdtx.html