时钟
准确模拟时间相关行为对于验证应用的正确性至关重要。了解有关 时钟模拟 的更多信息。
¥Accurately simulating time-dependent behavior is essential for verifying the correctness of applications. Learn more about clock emulation.
请注意,整个 BrowserContext 都安装了时钟,因此所有页面和 iframe 中的时间都由同一个时钟控制。
¥Note that clock is installed for the entire BrowserContext, so the time in all the pages and iframes is controlled by the same clock.
方法
¥Methods
fastForward
Added in: v1.45通过向前跳跃来推进时钟。最多只触发一次到期计时器。这相当于用户关闭注意本电脑盖一段时间,然后在给定时间后重新打开。
¥Advance the clock by jumping forward in time. Only fires due timers at most once. This is equivalent to user closing the laptop lid for a while and reopening it later, after given time.
用法
¥Usage
await page.clock.fastForward(1000);
await page.clock.fastForward('30:00');
参数
¥Arguments
时间可能是时钟前进的毫秒数或人类可读的字符串。有效的字符串格式为 "08" 表示八秒、"01:00" 表示一分钟和 "02:34:10" 表示两小时 34 分十秒。
¥Time may be the number of milliseconds to advance the clock by or a human-readable string. Valid string formats are "08" for eight seconds, "01:00" for one minute and "02:34:10" for two hours, 34 minutes and ten seconds.
返回
¥Returns
install
Added in: v1.45为以下与时间相关的函数安装虚假实现:
¥Install fake implementations for the following time-related functions:
-
Date
-
setTimeout
-
clearTimeout
-
setInterval
-
clearInterval
-
requestAnimationFrame
-
cancelAnimationFrame
-
requestIdleCallback
-
cancelIdleCallback
-
performance
使用假计时器手动控制测试中的时间流。它们允许你推进时间、触发计时器并控制时间相关函数的行为。有关更多信息,请参阅 clock.runFor() 和 clock.fastForward()。
¥Fake timers are used to manually control the flow of time in tests. They allow you to advance time, fire timers, and control the behavior of time-dependent functions. See clock.runFor() and clock.fastForward() for more information.
用法
¥Usage
await clock.install();
await clock.install(options);
参数
¥Arguments
初始化时间,默认为当前系统时间。
¥Time to initialize with, current system time by default.
返回
¥Returns
pauseAt
Added in: v1.45通过向前跳跃来推进时钟并暂停时间。一旦调用此方法,除非调用 clock.runFor()、clock.fastForward()、clock.pauseAt() 或 clock.resume(),否则不会触发任何计时器。
¥Advance the clock by jumping forward in time and pause the time. Once this method is called, no timers are fired unless clock.runFor(), clock.fastForward(), clock.pauseAt() or clock.resume() is called.
最多只触发一次到期计时器。这相当于用户关闭注意本电脑盖一段时间,然后在指定时间重新打开并暂停。
¥Only fires due timers at most once. This is equivalent to user closing the laptop lid for a while and reopening it at the specified time and pausing.
用法
¥Usage
await page.clock.pauseAt(new Date('2020-02-02'));
await page.clock.pauseAt('2020-02-02');
为获得最佳效果,请在浏览页面之前安装时钟,并将其设置为略早于预期测试时间的时间。这可确保所有计时器在页面加载期间正常运行,防止页面卡住。页面完全加载后,你可以安全地使用 clock.pauseAt() 暂停时钟。
¥For best results, install the clock before navigating the page and set it to a time slightly before the intended test time. This ensures that all timers run normally during page loading, preventing the page from getting stuck. Once the page has fully loaded, you can safely use clock.pauseAt() to pause the clock.
// 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'));
参数
¥Arguments
暂停时间。
¥Time to pause at.
返回
¥Returns
resume
Added in: v1.45恢复计时器。一旦调用此方法,时间就会恢复流动,计时器会照常触发。
¥Resumes timers. Once this method is called, time resumes flowing, timers are fired as usual.
用法
¥Usage
await clock.resume();
返回
¥Returns
runFor
Added in: v1.45推进时钟,触发所有与时间相关的回调。
¥Advance the clock, firing all the time-related callbacks.
用法
¥Usage
await page.clock.runFor(1000);
await page.clock.runFor('30:00');
参数
¥Arguments
时间可能是时钟前进的毫秒数或人类可读的字符串。有效的字符串格式为 "08" 表示八秒、"01:00" 表示一分钟和 "02:34:10" 表示两小时 34 分十秒。
¥Time may be the number of milliseconds to advance the clock by or a human-readable string. Valid string formats are "08" for eight seconds, "01:00" for one minute and "02:34:10" for two hours, 34 minutes and ten seconds.
返回
¥Returns
setFixedTime
Added in: v1.45使 Date.now
和 new Date()
始终返回固定的虚假时间,保持所有计时器运行。
¥Makes Date.now
and new Date()
return fixed fake time at all times, keeps all the timers running.
对于只需要使用预定义时间进行测试的简单场景,请使用此方法。对于更高级的场景,请改用 clock.install()。阅读有关 时钟模拟 的文档以了解更多信息。
¥Use this method for simple scenarios where you only need to test with a predefined time. For more advanced scenarios, use clock.install() instead. Read docs on clock emulation to learn more.
用法
¥Usage
await page.clock.setFixedTime(Date.now());
await page.clock.setFixedTime(new Date('2020-02-02'));
await page.clock.setFixedTime('2020-02-02');
参数
¥Arguments
时间以毫秒为单位设置。
¥Time to be set in milliseconds.
返回
¥Returns
setSystemTime
Added in: v1.45设置系统时间,但不触发任何计时器。使用此方法测试网页对时间变化的反应,例如从夏令时切换到冬令时,或更改时区。
¥Sets system time, but does not trigger any timers. Use this to test how the web page reacts to a time shift, for example switching from summer to winter time, or changing time zones.
用法
¥Usage
await page.clock.setSystemTime(Date.now());
await page.clock.setSystemTime(new Date('2020-02-02'));
await page.clock.setSystemTime('2020-02-02');
参数
¥Arguments
时间以毫秒为单位设置。
¥Time to be set in milliseconds.
返回
¥Returns