跳到主要内容

Clock

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

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


方法

fastForward

添加于: v1.45 clock.fastForward

通过在时间上向前跳跃来提前时钟。最多只触发一次到期的计时器。这相当于用户合上笔记本电脑盖一段时间后再次打开,时间已过去。

用法

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

参数

  • ticks number | string#

    时间可以是时钟前进的毫秒数,也可以是人类可读的字符串。有效的字符串格式包括表示 8 秒的"08"、表示 1 分钟的"01:00"以及表示 2 小时 34 分 10 秒的"02: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);

参数

  • options Object (可选)
    • time number | string | Date (可选)#

      初始化时使用的时间,默认为当前系统时间。

返回值


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

// 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('http://localhost:3333');
await page.clock.pauseAt(new Date('2024-12-10T10:00:00'));

参数

返回值


resume

添加于: v1.45 clock.resume

恢复计时器。调用此方法后,时间恢复流动,计时器照常触发。

用法

await clock.resume();

返回值


runFor

添加于: v1.45 clock.runFor

提前时钟,触发所有时间相关的回调。

用法

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

参数

  • ticks number | string#

    时间可以是时钟前进的毫秒数,也可以是人类可读的字符串。有效的字符串格式包括表示 8 秒的"08"、表示 1 分钟的"01:00"以及表示 2 小时 34 分 10 秒的"02: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');

参数

返回值