共计 2306 个字符,预计需要花费 6 分钟才能阅读完成。
背景介绍:为什么选择 Playwright?
在当前的软件开发中,自动化测试已经成为保证产品质量的重要手段。传统的自动化测试工具如 Selenium 虽然功能强大,但存在一些局限性,比如跨浏览器兼容性问题、执行速度慢等。Playwright 作为微软开源的现代化自动化测试工具,具有以下优势:

- 支持 Chromium、WebKit 和 Firefox 三大浏览器引擎
- 提供自动等待机制,减少测试代码中的显式等待
- 跨平台支持,可以在 Windows、macOS 和 Linux 上运行
- 内置网络拦截和模拟功能
- 执行速度快,性能优异
环境搭建
- 确保已安装 Node.js(建议使用 LTS 版本)
- 创建一个新的项目目录并初始化 npm
mkdir playwright-demo && cd playwright-demo
npm init -y
- 安装 Playwright 及相关依赖
npm install playwright @playwright/test
- 安装浏览器(这可能会花费一些时间)
npx playwright install
核心 API 详解
Playwright 的核心概念围绕三个主要对象:
- Browser:代表一个浏览器实例
- BrowserContext:相当于独立的浏览器会话(可以理解为无痕模式)
- Page:代表一个标签页
下面是这些对象的基本使用方法:
import {chromium} from 'playwright';
// 启动浏览器
const browser = await chromium.launch({headless: false});
// 创建上下文
const context = await browser.newContext();
// 创建页面
const page = await context.newPage();
// 导航到网址
await page.goto('https://example.com');
// 执行操作...
// 关闭浏览器
await browser.close();
实战示例:用户登录测试
下面是一个完整的用户登录测试案例,包含了页面操作、断言和清理:
import {test, expect} from '@playwright/test';
// 使用 Playwright 的测试运行器编写测试用例
test('用户登录测试', async ({ page}) => {
// 导航到登录页面
await page.goto('https://example.com/login');
// 填写用户名和密码
await page.fill('#username', 'testuser');
await page.fill('#password', 'password123');
// 点击登录按钮
await page.click('button[type="submit"]');
// 等待导航完成
await page.waitForNavigation();
// 验证登录成功
await expect(page).toHaveURL('https://example.com/dashboard');
await expect(page.locator('.welcome-message')).toContainText('Welcome, testuser!');
});
高级技巧
跨浏览器测试
Playwright 可以轻松实现跨浏览器测试。只需在配置文件中指定不同的浏览器即可:
// playwright.config.ts
import {PlaywrightTestConfig, devices} from '@playwright/test';
const config: PlaywrightTestConfig = {
projects: [
{
name: 'chromium',
use: {...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: {...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: {...devices['Desktop Safari'] },
},
],
};
export default config;
性能优化
- 使用
context复用浏览器会话,减少启动开销 - 并行执行测试用例
- 使用
page.waitForSelector()而不是sleep - 禁用不必要的资源加载
const context = await browser.newContext({
// 禁用图片加载以加速测试
bypassCSP: true,
ignoreHTTPSErrors: true,
viewport: {width: 1280, height: 720},
javaScriptEnabled: true,
});
避坑指南
常见问题及解决方案
- 元素定位失败
- 原因:元素还未加载完成或定位器不正确
-
解决:使用
page.waitForSelector()等待元素出现 -
测试不稳定
- 原因:网络延迟或资源加载问题
-
解决:增加适当的等待或使用
retries配置 -
跨域问题
- 原因:浏览器安全限制
-
解决:创建测试时使用
--disable-web-security参数 -
CI 环境下测试失败
- 原因:缺少必要的依赖
- 解决:确保 CI 环境中安装了所有浏览器依赖
思考与扩展
现在你已经了解了 Playwright 的基本使用方法,可以尝试以下扩展练习:
- 为你的项目编写一个端到端测试流程
- 尝试实现一个截图测试功能,比较页面截图与基线图片
- 研究如何集成到你的 CI/CD 流程中
Playwright 功能强大且易于使用,希望这篇文章能帮助你快速上手自动化测试。在实际项目中多加练习,你会逐渐掌握更多高级技巧。如果在使用过程中遇到问题,Playwright 的官方文档和社区都是很好的资源。
正文完
发表至: 技术分享
近一天内
