ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

快速上手playwight

快速上手playwight

在自动化测试和网页爬虫的领域,Selenium 曾是无可争议的霸主。然而,随着现代 Web 应用越来越复杂(大量使用 React、Vue、单页应用等),传统的测试工具开始显得有些力不从心。

今天,我们要聊的是由微软开源的现代化自动化测试工具——Playwright。它凭借速度快、稳定性高、开箱即用等特性,正迅速成为开发者和测试工程师的新宠。


一、 为什么要用 Playwright?pytest 呢?淘汰了?

首先,我们要厘清一个概念:Playwright 和 Pytest 并不是对立的关系,Pytest 绝对没有淘汰!

  • Playwright 是“执行者”(浏览器驱动):它负责控制浏览器、打开网页、点击按钮、输入文本。它替代的是Selenium或Puppeteer。
  • Pytest 是“管理者”(测试框架):它负责组织你的测试用例、断言结果、管理测试前后置操作(Fixture)以及生成测试报告。
  • 对于pytest来说 playwright 本质是一个第三方库,内置浏览器驱动

为什么要把它们结合使用?
Playwright 官方针对 Python 专门开发了pytest-playwright插件。这意味着,你既能享受 Playwright对现代网页极强的控制力,又能完美继承 Pytest强大的测试管理生态。两者是强强联手,而不是谁淘汰谁。


二、 Playwright 的优缺点是什么?

👍 核心优点

  1. 原生免驱,开箱即用:再也不用满大街去找对应浏览器版本的chromedriver.exe了!Playwright 在安装时会自动下载定制版 Chromium、Firefox 和 WebKit 浏览器,省去繁琐的配置。
  2. 自动等待(Auto-wait):这是最强大的功能。Playwright 在点击或输入前,会自动检查元素是否可见、是否可点击、是否停止动画,极大地减少了因网络延迟导致的随机报错(Flaky tests)。
  3. 多窗口与多上下文(Context):支持“隐身模式”隔离。你可以用极低的内存开销,在同一个测试中模拟两个完全独立的浏览器用户(例如:模拟买家和卖家同时在线交互)。
  4. 强大的工具链:自带代码生成器(录制器)、追踪查看器(Trace Viewer,可以像录像机一样回放测试过程中的每一步,包括网络请求和控制台日志)。

👎 缺点与局限

  1. 不支持老旧浏览器:由于它基于现代浏览器的底层协议,因此完全不支持 IE 浏览器(不过在 2026 年的今天,IE 已经基本退役了)。
  2. 真实浏览器支持有限:它使用的是内置的定制版浏览器内核,虽然行为与标准 Chrome/Safari 一致,但在测试“特定商业浏览器特有 Bug”时,可能不如直接驱动本地安装的真实浏览器。
  3. 社区生态沉淀:虽然发展极快,但比起拥有十几年历史的 Selenium,在某些冷门问题和老旧企业系统的解决方案上,网上的资料相对较少。

三、 Playwright vs Selenium:终极对比

为了让你更直观地感受两者的区别,我们通过一张表来进行对比:

特性Playwright (微软)Selenium (W3C 标准)
底层架构通过 WebSocket 常驻连接,直接操作浏览器底层 CDP 协议,速度极快。通过 HTTP 协议(WebDriver)发送命令,每次操作都是一次请求,速度较慢。
环境配置自动下载浏览器内核,无需配置任何 Driver。必须手动下载并配置与本地浏览器版本严格一致的 Driver。
元素等待内置自动等待机制(默认开箱即用)。需要手动写硬等待(time.sleep)或复杂的显式等待(WebDriverWait)。
执行速度极快,支持高并发的多上下文(Context)隔离。相对较慢,多开浏览器窗口非常消耗内存。
移动端模拟支持完美的移动端浏览器视口和设备模拟。不原生支持,通常需要结合 Appium 等额外工具。

四、 快速上手 Playwright(Python 版)

现在,让我们用最简单的步骤,在你的电脑上把 Playwright 跑起来!

Step 1: 安装

在终端中执行以下两行命令,即可完成库的安装和浏览器的自动下载:

# 安装 pytest 插件(会自动顺带安装 playwright 核心库) pip install pytest-playwright # 下载 Playwright 专用的浏览器内核 playwright install

Step 2: 编写第一个测试脚本

新建一个名为test_demo.py的文件(注意:由于我们配合 pytest 使用,文件名必须以test_开头),写入以下代码:

def test_google_search(page): # 1. 打开网页(page 是 pytest-playwright 自动注入的浏览器页面对象) page.goto("https://google.com") # 2. 定位输入框并输入关键字(Playwright 推荐使用角色定位器) page.get_by_role("combobox", name="搜索").fill("Playwright 自动化测试") # 3. 模拟按下回车键 page.keyboard.press("Enter") # 4. 断言:验证页面标题或 URL 是否符合预期 assert "Playwright" in page.title()

Step 3: 运行测试

在终端中直接运行 pytest 命令:

# 默认是无头模式(不弹出浏览器界面) pytest # 如果你想看浏览器的实际操作动画,可以加上 --headed 参数 pytest --headed

五、 补充进阶:Playwright 的“杀手级”功能

除了基础的代码编写,Playwright 还提供了两个能让你的开发效率翻倍的“神兵利器”:

1. 录制生成代码(Codegen)

不想写定位代码?没关系,让机器帮你写。在终端输入:

playwright codegen https://google.com

系统会弹出一个浏览器和一个代码窗口。你在浏览器里进行的任何点击、输入操作,都会被实时转换成 Python 代码。复制黏贴即可使用!

2. 追踪查看器(Trace Viewer)

自动化测试最头疼的是“本地运行好好的,CI/CD 服务器上莫名其妙报错”。Playwright 的 Trace 功能可以完美解决这个问题。
在运行测试时开启 Trace 录制:

pytest --tracing=on

运行结束后,会生成一个 zip 文件。你可以通过 Playwright 网页打开它,它会像素级还原报错时的屏幕截图、当时的 DOM 结构、网络请求耗时、甚至控制台的报错日志,堪称 Debug 神器。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进