跳到主要内容

Clock

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

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


方法

fastForward

Added in: v1.45 clock.fastForward

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

用法

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

参数

  • ticks 数字 | 字符串#

    时间可以是推进时钟的毫秒数或人类可读的字符串。有效的字符串格式为 "08"(八秒),"01:00"(一分钟)和 "02:34:10"(两小时 34 分 10 秒)。

返回


install

Added in: 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

Added in: 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() 暂停时钟。

// Initialize clock with some time before the test time and let the page load
// naturally. `Date.now` will progress as the timers fire.
await page.clock.install({ time: new Date('2024-12-10T08:00:00') });
await page.goto('https://127.0.0.1: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 数字 | 字符串#

    时间可以是推进时钟的毫秒数或人类可读的字符串。有效的字符串格式为 "08"(八秒),"01:00"(一分钟)和 "02:34:10"(两小时 34 分 10 秒)。

返回


setFixedTime

Added in: 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

Added in: 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');

参数

返回