Playwright Clock 是什么
Playwright 的 Clock API(page.clock)把浏览器里的时间变成可控对象:安装后,Date、定时器与 performance 计时都遵循你设定的时间,可以用 fastForward 快进、runFor 推进定时器、pauseAt 在指定时刻暂停、setFixedTime 固定当前时间。需要等结算计时、缓存过期、轮询任务等时间相关行为时,不用真等,也不依赖改系统时钟。
基本信息
| 安装方式 | page.clock.install() 或 install 时传入初始时间 |
|---|---|
| 推进时间 | fastForward 快进到目标时间,runFor 推进固定时长并触发定时器 |
| 固定时间 | setFixedTime 让 Date.now 恒定,用于验证时间展示类逻辑 |
| 冻结控制 | pauseAt 在指定时刻暂停,resume 继续 |
| 作用范围 | 作用于页面里的时间与定时器,不改变测试进程的时钟 |
| 适用场景 | 倒计时、超时重试、缓存过期、限时活动、防抖与节流 |
Playwright 用例示例
Playwright 用例示例
const { test, expect } = require('@playwright/test');
test('缓存过期后应重新拉取', async ({ page }) => {
await page.clock.install({ time: new Date('2026-01-01T09:00:00') });
await page.goto('/dashboard'); // 首次加载,命中缓存
await page.clock.fastForward('00:31'); // 跳过 31 分钟,跨过缓存过期点
await expect(page.getByText('已刷新')).toBeVisible(); // 等过期后的刷新行为
});
# 注意:须在页面加载或定时器启动前 install,否则不影响已运行的定时器典型使用场景
- 限时活动:验证倒计时结束前后的按钮状态与文案切换。
- 超时逻辑:把等待时间快进到阈值之外,验证重试或降级行为。
- 定时任务:验证页面内轮询、心跳、自动保存的触发节奏。
- 时间展示:用固定时间断言日期格式化与相对时间文案。
- 稳定性调试:冻结时间排除时间漂移带来的偶发失败。
安装时机很关键:定时器已经启动后再装时钟,已排队的任务不在控制范围内。
服务端时间不受影响:接口返回的时间戳仍按服务器走,端上时间与后端时间要分别断言。
注意版本差异:Clock 是较新版本引入的 API,老版本需升级 Playwright 后使用。