社区编辑申请
注册/登录
自动化测试工具-Playwright(快速上手)
开发 开发工具
本篇将介绍另一款强大而易用的 UI 自动化测试工具-Playwright。

1、前言

一提到 UI 自动化测试工具,首要推荐的必属是 Selenium,其优势在于跨平台、跨语言、完全开源、对商业用户也没有任何限制、支持分布式、拥有成熟的社区与学习文档等,目前已经迭代更新到 4 版本。那么缺点也有,比如环境配置、加载效率低、运行速度慢等。

除了 Selenium 就没有别的工具推荐了吗?当然不是,还有很多优秀的工具,比如 Cypress、Robot Framework 等。

本篇将介绍另一款强大而易用的 UI 自动化测试工具-Playwright。

2、简介

微软开源自动化测试工具 Playwright,支持主流浏览器,包括:Chrome、Firefox、Safari 等,同时支持以无头模式、有头模式运行,并提供了同步、异步的 API,可以结合 Pytest 测试框架使用,并且支持浏览器端的自动化脚本录制等功能。

特点:

1、跨浏览器。Playwright 支持所有现代渲染引擎,包括Chromium、WebKit 和 Firefox。

2、跨平台。在 Windows、Linux 和 macOS 上进行本地或 CI、无头或有头测试。

3、跨语言。在 TypeScript、JavaScript、Python、.NET、Java 中使用Playwright API。

4、测试移动网络。适用于 Android 和 Mobile Safari 的 Google Chrome 原生移动仿真。相同的渲染引擎适用于您的桌面和云端。

官网地址:

https://playwright.dev。

GitHub地址:

https://github.com/microsoft/playwright。

3、安装

Playwright 支持跨语言,本篇将以 Python 进行讲解。

首先要安装 Python(有 Python 环境)。

之后打开命令行,输入安装命令即可。

pip install --upgrade pip
pip install playwright
playwright install

4、交互模式

Playwright 支持交互模式,即运行单行代码或者代码块,能立即给出运行结果。

由于 Playwright 支持同步和异步的 API,那么应先了解一下什么是同步和异步?

同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。

异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。

下面以操作打开浏览器,访问百度首页,关闭浏览器为例。

(1)同步命令

打开命令行,输入 python。

进入到 Python 交互模式中,输入如下命令:

from playwright.sync_api import sync_playwright
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com/")
browser.close()
playwright.stop()

输入访问百度首页命令,浏览器页面会同时跳转到百度首页,同时命令行输出响应与请求的信息。

图片

(2)异步命令

打开命令行,输入 python -m asyncio。

进入到 Python 交互模式中,输入如下命令:

from playwright.async_api import async_playwright
playwright = await async_playwright().start()
browser = await playwright.chromium.launch(headless=False)
page = await browser.new_page()
await page.goto("https://www.baidu.com/")
await browser.close()
await playwright.stop()

输入访问百度首页命令,浏览器页面也会同时跳转到百度首页,命令行也会输出响应与请求的信息。

图片

5、录制模式

Playwright 带有命令行工具(录制功能),可用于记录用户交互并生成代码(Java、Python等)。其实就是类似于 Selenium IDE。

(1)常规录制

打开命令行,输入:

playwright codegen baidu.com

自动打开浏览器,并跳转到百度首页。

图片

同时也弹出录制窗口,可以看到是录制中,脚本语言为 Python。

图片

通过操作(点击、输入等)浏览器页面,脚本也会自动增加操作的步骤。

图片

此外,录制工具还可以获取元素的定位。点击停止录制,之后再点击 Explore 后,在页面点击想要定位的元素,即可获取到该元素定位的值。

图片

最后将录制的脚本复制出来,可做适当的调整。

调整后的脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
# Go to https://www.baidu.com/
page.goto("https://www.baidu.com/")
# Click input[name="wd"]
page.locator("input[name=\"wd\"]").click()
# Fill input[name="wd"]
page.locator("input[name=\"wd\"]").fill("自动化测试")
# Click text=百度一下
page.locator("text=百度一下").click()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)

(2)模拟移动设备录制

open 可以模拟移动设备和平板设备。

例如模拟 iPhone 13 访问作者的 CSDN。

playwright open --device="iPhone 13" blog.csdn.net/wangmcn

如图:模拟 iPhone 13 打开浏览器的效果。

图片

6、编写模式

使用 IDE(如 PyCharm、Visual Studio Code 等) 进行编写代码并运行程序。

(1)启动浏览器(无头模式)

Playwright 可以启动三种浏览器中的 chromium、firefox、webkit 任何一种。

示例操作如下,打开浏览器、跳转百度、屏幕截图、输出页面标题、关闭浏览器。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://www.baidu.com/")
page.screenshot(path="example.png")
print(page.title())
browser.close()

运行结果:控制台输出页面标题。

图片

(2)启动浏览器(有头模式)

默认情况下,Playwright 以无头模式运行浏览器。要查看浏览器 UI(有头模式),请在启动浏览器时传递 headless=False 标志,还可以使用 slow_mo 来减慢执行速度。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, slow_mo=50)
page = browser.new_page()
page.goto("https://www.baidu.com/")
page.screenshot(path="example.png")
print(page.title())
browser.close()

(3)异步

Playwright 支持 API 的两种变体:同步和异步。

支持异步,如果你的项目使用 asyncio,则应该使用 async API。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://www.baidu.com/")
print(await page.title())
await browser.close()

asyncio.run(main())
责任编辑:姜华 来源: AllTests软件测试
相关推荐

2022-06-16 11:57:22

2022-03-10 16:01:29

Playwright开源

2021-01-21 10:02:22

微软PythonPlaywright

2020-12-31 11:55:56

PythonPlaywright微软

2021-01-20 14:05:31

微软Pythonlaywright

2016-11-11 14:34:46

开源开源工具

2019-03-06 09:47:33

工具代码测试

2019-11-11 13:50:42

工具代码开发

2020-07-17 07:41:29

开源开发技术

同话题下的热门内容

分布式锁工具:Redisson使用VScode的几点感受,对比Pycharm、Jupyter优劣势GitHub 添加工具以简化软件开发管理用 Antlr 重构脚本解释器

编辑推荐

终于有人把Elasticsearch原理讲透了!花了一个星期,我终于把RPC框架整明白了!这可能是把ZooKeeper概念讲的最清楚的一篇文章论如何下载一个在线的m3u8文件到本地成为一个mp4!拜托!面试不要再问我Spring Cloud底层原理
我收藏的内容
点赞
收藏

51CTO技术栈公众号