Clock
精确模拟与时间相关的行为对于验证应用程序的正确性至关重要。了解更多关于 时钟模拟 的信息。
请注意,时钟是为整个 BrowserContext 安装的,因此所有页面和 iframe 中的时间都由同一个时钟控制。
方法
fastForward
添加于:v1.45通过向前跳跃时间来推进时钟。最多只触发一次到期的定时器。这相当于用户合上笔记本电脑盖子一段时间,然后在给定时间后重新打开。
用法
page.clock().fastForward(1000);
page.clock().fastForward("30:00");
参数
-
时间可以是推进时钟的毫秒数,也可以是人类可读的字符串。有效的字符串格式有:“08” 表示八秒,“01:00” 表示一分钟,“02:34:10” 表示两小时 34 分 10 秒。
返回值
install
新增于:v1.45为以下与时间相关的函数安装模拟实现:
Date
setTimeout
clearTimeout
setInterval
clearInterval
requestAnimationFrame
cancelAnimationFrame
requestIdleCallback
cancelIdleCallback
performance
模拟定时器用于在测试中手动控制时间流。它们允许你推进时间、触发定时器以及控制依赖时间的函数的行为。更多信息请参阅 Clock.runFor() 和 Clock.fastForward()。
用法
Clock.install();
Clock.install(options);
参数
返回值
pauseAt
新增于:v1.45通过向前跳跃时间来推进时钟并暂停时间。调用此方法后,除非调用 Clock.runFor()、Clock.fastForward()、Clock.pauseAt() 或 Clock.resume(),否则不会触发任何定时器。
最多仅触发一次到期的定时器。这相当于用户合上笔记本电脑盖子一段时间,然后在指定时间重新打开并暂停。
用法
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd");
page.clock().pauseAt(format.parse("2020-02-02"));
page.clock().pauseAt("2020-02-02");
为获得最佳效果,在导航到页面之前安装时钟,并将其设置为略早于预期测试时间的时间。这可确保在页面加载期间所有定时器正常运行,防止页面卡住。页面完全加载后,你可以安全地使用 Clock.pauseAt() 暂停时钟。
// 使用略早于测试时间的某个时间初始化时钟,并让页面自然加载。
// 随着定时器触发,`Date.now` 将推进。
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss");
page.clock().install(new Clock.InstallOptions().setTime(format.parse("2024-12-10T08:00:00")));
page.navigate("http://localhost:3333");
page.clock().pauseAt(format.parse("2024-12-10T10:00:00"));
参数
返回值
resume
新增于:v1.45恢复定时器。调用此方法后,时间恢复流动,定时器照常触发。
用法
Clock.resume();
返回值
runFor
新增于:v1.45推进时钟,触发所有与时间相关的回调。
用法
page.clock().runFor(1000);
page.clock().runFor("30:00");
参数
-
时间可以是推进时钟的毫秒数,也可以是人类可读的字符串。有效的字符串格式有 “08” 表示八秒,“01:00” 表示一分钟,“02:34:10” 表示两小时 34 分 10 秒。
返回值
setFixedTime
新增于:v1.45使 Date.now
和 new Date()
始终返回固定的伪时间,同时让所有定时器继续运行。
对于只需要使用预定义时间进行测试的简单场景,可以使用此方法。对于更复杂的场景,请改用 Clock.install()。阅读 时钟模拟 文档以了解更多信息。
用法
page.clock().setFixedTime(new Date());
page.clock().setFixedTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setFixedTime("2020-02-02");
参数
返回值
setSystemTime
新增于:v1.45设置系统时间,但不会触发任何定时器。使用此方法可测试网页对时间变化的反应,例如从夏令时切换到冬令时,或更改时区。
用法
page.clock().setSystemTime(new Date());
page.clock().setSystemTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setSystemTime("2020-02-02");
参数
返回值