前端自动化还在踩坑?Node Playwright 这款神器你试过了吗?

74 阅读6分钟

Node Playwright:前端人的自动化神器,这波必须安利!

最近发现了一个前端自动化测试+爬虫的宝藏工具——Node Playwright。用了一段时间直接封神,跟大家聊聊它的过人之处、能用到的场景,新手也能轻松get~。

Playwright是一个面向现代网页应用的端到端测试框架。它集成了测试运行工具、断言、隔离、并行化和丰富的工具工具。Playwright 支持 Chromium、WebKit 和 Firefox 在 Windows、Linux 和 macOS 上运行,本地或 CI 版本,Headless 或 head,并原生支持 Chrome(Android)和 Mobile Safari 的移动模拟。

官方文档地址:Playwright

一、Node Playwright的优点

用过Selenium、Puppeteer的朋友,再用Playwright绝对会眼前一亮。它的优点真的很实在:

  1. 跨浏览器+多端兼容,省心到哭:自带Chrome、Firefox、Safari等主流浏览器的驱动,不用自己手动下载配置,开箱就能用。而且不仅支持桌面端,还能模拟移动端设备(比如iPhone、Android)的浏览效果,做响应式测试的时候直接省一半力。
  2. 自动等待,告别“睡眠等待”的坑:以前用其他工具写自动化,最头疼的就是元素还没加载出来,代码就已经执行了,只能靠setTimeout硬等。Playwright自带智能等待机制,会自动等待元素可交互再执行操作,不用再写一堆冗余的等待代码,稳定性直接拉满。
  3. 录制功能yyds,新手友好度拉满:如果不想手动写代码,直接用它的“录制模式”,打开浏览器操作一遍,它会自动生成对应的代码。比如点击按钮、输入文本、跳转页面这些操作,录完复制粘贴就能用,新手也能快速写出自动化脚本。
  4. 功能全面,不止是测试:除了常规的页面操作,还支持网络拦截(比如mock接口数据)、截图/录屏、处理iframe、文件上传下载等,不管是测试还是爬虫,大部分需求都能满足。
  5. 稳定性强,少踩坑:Playwright是微软开发维护的,更新迭代很稳定,遇到问题文档也比较全。而且它对现代前端框架(Vue、React、Angular)的兼容性很好,不会出现很多奇奇怪怪的适配问题。

二、场景

  1. 前端自动化测试:这是它的核心场景之一。比如页面功能测试(登录、表单提交、页面跳转)、响应式测试(模拟不同设备尺寸)、回归测试(每次迭代后自动跑一遍核心流程,避免旧功能出问题)。以前需要手动点一遍的流程,用它写个脚本,一键执行,还能生成测试报告,省了超多重复工作。
  2. 数据爬虫(合法合规前提下) :对于那些动态渲染的页面(比如用Vue/React写的页面,数据靠接口加载),普通的爬虫抓不到数据,Playwright就能派上用场。它能模拟真实浏览器的渲染过程,等待数据加载完成后再抓取,比传统爬虫更万能。比如爬取电商平台的商品信息、资讯网站的文章内容等。
  3. 自动化操作&批量任务:如果有很多重复的浏览器操作,比如批量注册账号、批量上传文件、批量导出数据等,都能用它写脚本自动完成。比如我之前需要每天导出后台的统计数据,写了个Playwright脚本,定时执行,直接解放双手。
  4. 页面性能监控&问题排查:可以用它模拟用户操作,同时收集页面的加载性能数据(比如首屏加载时间、接口响应时间),还能截图、录屏留存问题现场,方便排查线上问题。

三、几个常用方法实例

下面给大家放几个最常用的方法,都是实际工作中能直接用到的,先确保你已经安装好了依赖:

首先初始化项目,安装依赖:

npm init -y
npm install playwright
# 自动下载浏览器驱动(Chrome、Firefox、Safari)
npx playwright install

1. 基础场景:打开浏览器,访问页面并截图

这个是最入门的操作,比如打开百度,搜索“Node Playwright”,然后截图保存:

// index.js
const { chromium } = require('playwright');

(async () => {
  // 1. 启动浏览器(headless: false 表示显示浏览器窗口,默认是true无头模式)
  const browser = await chromium.launch({ headless: false });
  // 2. 创建一个新页面
  const page = await browser.new_page();
  // 3. 访问百度
  await page.goto('https://www.baidu.com');
  // 4. 定位搜索框,输入内容(通过id定位,也可以用css、xpath等)
  await page.fill('#kw', 'Node Playwright');
  // 5. 定位搜索按钮,点击
  await page.click('#su');
  // 6. 等待页面加载完成(其实Playwright会自动等待,这里写出来更清晰)
  await page.wait_for_load_state('networkidle');
  // 7. 截图保存
  await page.screenshot({ path: 'baidu-search-result.png', fullPage: true });
  // 8. 关闭浏览器
  await browser.close();
})();

运行命令:node index.js,就能看到浏览器自动打开操作,最后生成一张完整的搜索结果截图。

2. 录制功能:自动生成代码

如果不想手动写代码,直接用录制命令:

npx playwright codegen https://www.baidu.com

执行后会打开两个窗口:一个是浏览器窗口,一个是代码生成窗口。你在浏览器里做的所有操作(比如输入、点击、跳转),都会自动生成对应的代码,直接复制到项目里就能用,新手必备!

3. 网络拦截:mock接口数据

测试的时候,有时候需要模拟接口返回错误或者特定数据,用Playwright的网络拦截功能就能实现:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.new_page();

  // 拦截指定接口,mock返回数据
  await page.route('https://api.example.com/getData', async (route) => {
    // 自定义返回数据
    const mockData = {
      code: 200,
      message: 'success',
      data: [{ name: 'mock数据', value: 123 }]
    };
    // 发送mock响应
    await route.fulfill({
      status: 200,
      contentType: 'application/json',
      body: JSON.stringify(mockData)
    });
  });

  // 访问需要调用该接口的页面
  await page.goto('https://example.com');
  // 等待接口请求完成
  await page.wait_for_request('https://api.example.com/getData');
  // 后续操作...

  await browser.close();
})();

4. 模拟移动端设备

测试响应式页面的时候,模拟iPhone 14的效果:

const { chromium, devices } = require('playwright');

(async () => {
  // 获取iPhone 14的设备配置
  const iPhone14 = devices['iPhone 14'];
  const browser = await chromium.launch({ headless: false });
  // 创建页面时传入设备配置
  const context = await browser.new_context({
    ...iPhone14,
    // 模拟深色模式(可选)
    colorScheme: 'dark'
  });
  const page = await context.new_page();
  await page.goto('https://example.com');
  // 截图查看效果
  await page.screenshot({ path: 'mobile-example.png' });
  await browser.close();
})();

四、最后

Node Playwright真的是前端人的宝藏工具,不管是做测试还是处理一些重复的浏览器操作,都能大大提高效率。而且它的学习成本不高,录制功能+详细的文档,新手也能快速上手。

如果你们有自动化测试、爬虫相关的需求,或者平时有很多重复的浏览器操作,真的可以试试它!用过之后绝对会跟我一样,再也不想手动点点点了~

如果大家有其他好用的Playwright技巧,也欢迎在评论区交流呀!