自动化测试工具-Playwright(快速上手)

目录

1、前言

2、简介

3、安装

4、交互模式

5、录制模式

6、编写模式


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 访问作者的 优快云。

playwright open --device="iPhone 13" blog.youkuaiyun.com/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())

精彩推荐

面试笔试系列

思维导图系列

Linux常用命令壁纸

接口Requests系列

测试框架pytest系列

Jmeter快速上手之接口测试

自动化测试框架结构图

移动安全框架(MobSF)

### Playwright 使用指南及相关常见问题 #### 什么是 PlaywrightPlaywright 是一种用于自动化控制现代浏览器的强大工具,支持 Chromium、Firefox 和 WebKit 等多种浏览器引擎。它不仅适用于测试场景,还可以用来抓取网页数据或模拟复杂的用户交互行为[^1]。 --- #### 如何安装 Playwright? 要开始使用 Playwright,需先完成以下步骤: 1. **确保环境准备就绪** 需要安装 Node.js 并验证其版本是否满足最低要求。可通过 `node -v` 命令检查当前系统的 Node.js 版本。 2. **安装 Playwright 及依赖项** 对于 Python 用户,可以直接通过 pip 安装 PlaywrightPython SDK: ```bash pip install playwright ``` 接着初始化所需的支持浏览器组件: ```bash playwright install ``` 3. **针对特定需求自定义安装** 如果只需要某些特定的浏览器(如 Firefox),可以指定安装目标: ```bash playwright install firefox ``` 以上过程涵盖了基本的安装流程[^3]。 --- #### Playwright 的核心功能与特性 以下是 Playwright 提供的一些主要特性和优势: 1. **跨平台兼容性** 支持主流浏览器引擎(Chromium、Firefox 和 WebKit),能够覆盖更广泛的测试范围和真实用户体验仿真[^1]。 2. **强大的选择器机制** Playwright 内置了灵活的选择器策略,允许开发者轻松定位页面上的任何元素。例如,CSS 选择器、XPath 表达式甚至基于文本的内容匹配均可作为选项之一[^2]。 3. **内置超时保护机制** 执行每一步操作前都会自动检测条件是否成熟;如果超过设定的时间限制仍未达成,则抛出 TimeoutError 异常提示错误位置以便调试[^4]。 4. **异步编程模型** 利用 Python 中的协程技术实现高效的并发处理能力,尤其适合大规模批量任务调度或者长时间运行的任务管理[^2]。 --- #### 创建第一个简单的 Playwright 脚本实例 下面展示了一个完整的入门级脚本样例,演示如何访问网站并截屏保存图片文件: ```python from playwright.sync_api import sync_playwright def run(playwright): browser = playwright.chromium.launch(headless=False) # 启动带界面模式下的 Chrome 浏览器 context = browser.new_context() # 开启新标签页加载 Google 主页 page = context.new_page() page.goto("https://www.google.com") # 截图存储至本地磁盘路径下 page.screenshot(path="google_homepage.png") # 清理资源退出程序 context.close() browser.close() with sync_playwright() as pw: run(pw) ``` 此代码片段展示了同步方式调用 API 进行基础浏览活动的过程[^1]。 对于需要更高性能的应用场合,则推荐采用异步风格编写逻辑结构更加清晰简洁高效可靠的解决方案如下所示: ```python import asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as p: device_descriptor = p.devices["iPhone X"] # 模拟 iPhone 设备参数 browser = await p.webkit.launch() # 启动 Webkit 浏览器 context = await browser.new_context( **device_descriptor, locale='zh-CN', timezone_id='Asia/Shanghai' ) page = await context.new_page() await page.goto('http://example.com') content = await page.content() # 获取整个 HTML 文档字符串形式表示 print(content[:50]) # 输出部分源码预览 await browser.close() if __name__ == "__main__": asyncio.run(main()) ``` 上述例子说明了如何利用设备描述符来模仿移动客户端的行为特征,并且提取远程服务器返回的数据内容进行进一步分析加工处理[^2]。 --- #### 常见问题解答 (FAQs) ##### Q: 怎么解决 “No browsers installed” 错误消息? A: 当首次尝试运行 Playwright 应用却收到此类警告信息时表示尚未下载对应的目标浏览器包体,请按照官方指引重新执行安装命令即可修复该状况。具体做法参阅前述章节关于安装的部分介绍[^3]。 ##### Q: 是否存在替代方案代替默认关闭行为? A: 默认情况下一旦超出作用域范围之外所有关联的对象都将被销毁回收掉内存空间从而终止相应服务连接状态。但如果希望保留持久化链接则应该改用 `.start()` 方法手动获取全局可用实例句柄而不是依靠上下文管理器语法糖封装好的临时局部变量副本[^2]. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangmcn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值