时钟
准确模拟时间相关行为对于验证应用程序的正确性至关重要。了解更多关于clock emulation的信息。
请注意,clock是为整个BrowserContext安装的,因此所有页面和iframe中的时间都由同一个clock控制。
方法
FastForwardAsync
Added in: v1.45通过向前跳跃时间推进时钟。最多只触发一次到期的计时器。这相当于用户暂时合上笔记本电脑盖子,在给定时间后重新打开它。
用法
await page.Clock.FastForwardAsync(1000);
await page.Clock.FastForwardAsync("30:00");
参数
-
时间可以是以毫秒为单位的数值,也可以是可读的字符串。有效的字符串格式包括:"08"表示8秒,"01:00"表示1分钟,"02:34:10"表示2小时34分10秒。
返回
InstallAsync
Added in: v1.45为以下与时间相关的函数安装模拟实现:
Date
setTimeout
clearTimeout
setInterval
clearInterval
requestAnimationFrame
cancelAnimationFrame
requestIdleCallback
cancelIdleCallback
performance
假定时器用于在测试中手动控制时间流动。它们允许您推进时间、触发定时器并控制时间相关函数的行为。更多信息请参阅Clock.RunForAsync()和Clock.FastForwardAsync()。
用法
await Clock.InstallAsync(options);
参数
返回
PauseAtAsync
Added in: v1.45通过向前跳跃时间来推进时钟并暂停时间。一旦调用此方法,除非调用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
Added in: v1.45恢复计时器。一旦调用此方法,时间将继续流动,计时器将正常触发。
用法
await Clock.ResumeAsync();
返回
RunForAsync
Added in: v1.45推进时钟,触发所有与时间相关的回调。
用法
await page.Clock.RunForAsync(1000);
await page.Clock.RunForAsync("30:00");
参数
-
时间可以是毫秒数来推进时钟,也可以是可读的字符串。有效的字符串格式包括:"08"表示8秒,"01:00"表示1分钟,"02:34:10"表示2小时34分10秒。
返回
SetFixedTimeAsync
Added in: v1.45使 Date.now
和 new Date()
始终返回固定的模拟时间,同时保持所有计时器正常运行。
在只需测试预定义时间的简单场景中使用此方法。对于更复杂的场景,请改用Clock.InstallAsync()。阅读clock emulation文档以了解更多信息。
用法
await page.Clock.SetFixedTimeAsync(DateTime.Now);
await page.Clock.SetFixedTimeAsync(new DateTime(2020, 2, 2));
await page.Clock.SetFixedTimeAsync("2020-02-02");
参数
返回
SetSystemTimeAsync
Added in: v1.45设置系统时间,但不会触发任何计时器。使用此功能来测试网页对时间变化的反应,例如从夏令时切换到冬令时,或更改时区。
用法
await page.Clock.SetSystemTimeAsync(DateTime.Now);
await page.Clock.SetSystemTimeAsync(new DateTime(2020, 2, 2));
await page.Clock.SetSystemTimeAsync("2020-02-02");
参数
返回