跳到主要内容

Clock

准确模拟时间相关行为对于验证应用程序的正确性至关重要。了解更多关于时钟模拟的信息。

请注意,时钟是为整个BrowserContext安装的,因此所有页面和iframe中的时间都由同一个时钟控制。


方法

fastForward

添加于: v1.45 clock.fastForward

通过向前跳跃时间推进时钟。最多只触发一次到期的定时器。这相当于用户合上笔记本电脑盖子一段时间后,在给定时间后重新打开它。

用法

await page.clock.fastForward(1000);
await page.clock.fastForward('30:00');

参数

  • ticks number | string#

    时间可以是推进时钟的毫秒数或人类可读的字符串。有效的字符串格式包括:"08"表示8秒,"01:00"表示1分钟,"02:34:10"表示2小时34分10秒。

返回


install

添加于: v1.45 clock.install

为以下时间相关函数安装模拟实现:

  • Date
  • setTimeout
  • clearTimeout
  • setInterval
  • clearInterval
  • requestAnimationFrame
  • cancelAnimationFrame
  • requestIdleCallback
  • cancelIdleCallback
  • performance

模拟计时器用于在测试中手动控制时间流。它们允许你推进时间、触发计时器并控制时间相关函数的行为。更多信息请参阅 clock.runFor()clock.fastForward()

用法

await clock.install();
await clock.install(options);

参数

返回值


pauseAt

添加于: v1.45 clock.pauseAt

通过时间跳跃前进并暂停时钟。调用此方法后,除非调用 clock.runFor()clock.fastForward()clock.pauseAt()clock.resume(),否则不会触发任何定时器。

每个到期定时器最多只触发一次。这相当于用户合上笔记本电脑盖子一段时间后,在指定时间重新打开并暂停时钟。

用法

await page.clock.pauseAt(new Date('2020-02-02'));
await page.clock.pauseAt('2020-02-02');

为了获得最佳效果,建议在页面导航前安装时钟并将其设置为略早于测试时间的时间点。这样可以确保所有定时器在页面加载期间正常运行,防止页面卡死。页面完全加载后,可以安全使用 clock.pauseAt() 暂停时钟。

// 在测试时间前初始化时钟,让页面自然加载
// `Date.now` 会随着定时器触发而推进
await page.clock.install({ time: new Date('2024-12-10T08:00:00') });
await page.goto('http://localhost:3333');
await page.clock.pauseAt(new Date('2024-12-10T10:00:00'));

参数

返回值


resume

Added in: v1.45 clock.resume

恢复计时器。调用此方法后,时间将继续流动,计时器会正常触发。

用法

await clock.resume();

返回值


runFor

Added in: v1.45 clock.runFor

推进时钟时间,触发所有与时间相关的回调。

用法

await page.clock.runFor(1000);
await page.clock.runFor('30:00');

参数

  • ticks number | string#

    时间可以是推进时钟的毫秒数,也可以是可读的字符串格式。有效的字符串格式包括:"08"表示8秒,"01:00"表示1分钟,"02:34:10"表示2小时34分10秒。

返回值


setFixedTime

v1.45 版本新增 clock.setFixedTime

使 Date.nownew Date() 始终返回固定的模拟时间,同时保持所有计时器正常运行。

此方法适用于只需要测试预定义时间的简单场景。对于更复杂的场景,请改用 clock.install()。了解更多请参阅时钟模拟文档。

用法

await page.clock.setFixedTime(Date.now());
await page.clock.setFixedTime(new Date('2020-02-02'));
await page.clock.setFixedTime('2020-02-02');

参数

返回值


setSystemTime

v1.45 版本新增 clock.setSystemTime

设置系统时间,但不会触发任何计时器。用于测试网页对时间变化的反应,例如从夏令时切换到冬令时,或更改时区。

用法

await page.clock.setSystemTime(Date.now());
await page.clock.setSystemTime(new Date('2020-02-02'));
await page.clock.setSystemTime('2020-02-02');

参数

返回值