跳到主要内容

Clock

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

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


方法

FastForwardAsync

添加于:v1.45 clock.FastForwardAsync

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

用法

await page.Clock.FastForwardAsync(1000);
await page.Clock.FastForwardAsync("30:00");

参数

  • ticks long | string#

    时间可以是推进时钟的毫秒数,也可以是人类可读的字符串。有效的字符串格式有 “08” 表示八秒,“01:00” 表示一分钟,“02:34:10” 表示两小时 34 分 10 秒。

返回值


InstallAsync

新增于:v1.45 clock.InstallAsync

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

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

模拟定时器用于在测试中手动控制时间流。它们允许你推进时间、触发定时器以及控制依赖时间的函数的行为。更多信息请参阅 Clock.RunForAsync()Clock.FastForwardAsync()

用法

await Clock.InstallAsync(options);

参数

  • options ClockInstallOptions? (可选)
    • Time|TimeDate string? | Date? (可选)#

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

返回值


PauseAtAsync

新增于:v1.45 clock.PauseAtAsync

通过向前跳跃时间来推进时钟并暂停时间。调用此方法后,除非调用 Clock.RunForAsync()Clock.FastForwardAsync()Clock.PauseAtAsync()Clock.ResumeAsync(),否则不会触发任何定时器。

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

用法

await page.Clock.PauseAtAsync(DateTime.Parse("2020-02-02"));
await page.Clock.PauseAtAsync("2020-02-02");

为获得最佳效果,请在导航页面之前安装时钟,并将其设置为略早于预期测试时间的时间。这可确保在页面加载期间所有定时器正常运行,防止页面卡住。页面完全加载后,您可以安全地使用 Clock.PauseAtAsync() 暂停时钟。

参数

返回值


ResumeAsync

新增于:v1.45 clock.ResumeAsync

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

用法

await Clock.ResumeAsync();

返回值


RunForAsync

新增于:v1.45 clock.RunForAsync

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

用法

await page.Clock.RunForAsync(1000);
await page.Clock.RunForAsync("30:00");

参数

  • ticks long | string#

    时间可以是推进时钟的毫秒数,也可以是人类可读的字符串。有效的字符串格式有:“08” 表示八秒,“01:00” 表示一分钟,“02:34:10” 表示两小时 34 分 10 秒。

返回值


SetFixedTimeAsync

新增于:v1.45 clock.SetFixedTimeAsync

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

对于只需要使用预定义时间进行测试的简单场景,可以使用此方法。对于更复杂的场景,请使用 Clock.InstallAsync()。阅读 时钟模拟 文档以了解更多信息。

用法

await page.Clock.SetFixedTimeAsync(DateTime.Now);
await page.Clock.SetFixedTimeAsync(new DateTime(2020, 2, 2));
await page.Clock.SetFixedTimeAsync("2020-02-02");

参数

返回值


SetSystemTimeAsync

新增于:v1.45 clock.SetSystemTimeAsync

设置系统时间,但不会触发任何定时器。例如,可以使用此方法测试网页对时间变化(如从夏令时切换到冬令时,或更改时区)的反应。

用法

await page.Clock.SetSystemTimeAsync(DateTime.Now);
await page.Clock.SetSystemTimeAsync(new DateTime(2020, 2, 2));
await page.Clock.SetSystemTimeAsync("2020-02-02");

参数

返回值