Clock
准确模拟时间相关的行为对于验证应用程序的正确性至关重要。了解更多关于时钟模拟的信息。
请注意,时钟是为整个 BrowserContext 安装的,因此所有页面和 iframe 中的时间都由同一个时钟控制。
方法
fast_forward
添加于:v1.45通过向前跳跃时间来推进时钟。最多只触发一次到期的定时器。这相当于用户合上笔记本电脑盖一段时间后,在给定时间后重新打开。
用法
- 同步
- 异步
page.clock.fast_forward(1000)
page.clock.fast_forward("30:00")
await page.clock.fast_forward(1000)
await page.clock.fast_forward("30:00")
参数
-
时间可以是推进时钟的毫秒数,也可以是人类可读的字符串。有效的字符串格式为 “08”(八秒),“01:00”(一分钟)和 “02:34:10”(两小时,34 分钟和十秒)。
返回值
install
添加于:v1.45为以下时间相关函数安装伪造的实现
Date
setTimeout
clearTimeout
setInterval
clearInterval
requestAnimationFrame
cancelAnimationFrame
requestIdleCallback
cancelIdleCallback
performance
伪造定时器用于手动控制测试中时间的流逝。它们允许你推进时间、触发定时器和控制时间相关函数的行为。有关更多信息,请参阅 clock.run_for() 和 clock.fast_forward()。
用法
clock.install()
clock.install(**kwargs)
参数
返回值
pause_at
添加于:v1.45通过向前跳跃时间来推进时钟并暂停时间。一旦调用此方法,除非调用 clock.run_for()、clock.fast_forward()、clock.pause_at() 或 clock.resume(),否则不会触发定时器。
最多只触发一次到期的定时器。这相当于用户合上笔记本电脑盖一段时间后,在指定时间重新打开并暂停。
用法
- 同步
- 异步
page.clock.pause_at(datetime.datetime(2020, 2, 2))
page.clock.pause_at("2020-02-02")
await page.clock.pause_at(datetime.datetime(2020, 2, 2))
await page.clock.pause_at("2020-02-02")
为了获得最佳效果,请在导航页面之前安装时钟,并将其设置为略早于预期测试时间的时间。这确保了所有定时器在页面加载期间正常运行,防止页面卡住。页面完全加载后,你可以安全地使用 clock.pause_at() 来暂停时钟。
- 同步
- 异步
# Initialize clock with some time before the test time and let the page load
# naturally. `Date.now` will progress as the timers fire.
page.clock.install(time=datetime.datetime(2024, 12, 10, 8, 0, 0))
page.goto("https://127.0.0.1:3333")
page.clock.pause_at(datetime.datetime(2024, 12, 10, 10, 0, 0))
# 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=datetime.datetime(2024, 12, 10, 8, 0, 0))
await page.goto("https://127.0.0.1:3333")
await page.clock.pause_at(datetime.datetime(2024, 12, 10, 10, 0, 0))
参数
返回值
resume
添加于:v1.45恢复定时器。一旦调用此方法,时间恢复流动,定时器照常触发。
用法
clock.resume()
返回值
run_for
添加于:v1.45推进时钟,触发所有时间相关的回调。
用法
- 同步
- 异步
page.clock.run_for(1000);
page.clock.run_for("30:00")
await page.clock.run_for(1000);
await page.clock.run_for("30:00")
参数
-
时间可以是推进时钟的毫秒数,也可以是人类可读的字符串。有效的字符串格式为 “08”(八秒),“01:00”(一分钟)和 “02:34:10”(两小时,34 分钟和十秒)。
返回值
set_fixed_time
添加于:v1.45使 Date.now 和 new Date() 始终返回固定的伪造时间,并保持所有定时器运行。
对于只需要使用预定义时间进行测试的简单场景,请使用此方法。对于更高级的场景,请改用 clock.install()。阅读关于 时钟模拟 的文档以了解更多信息。
用法
- 同步
- 异步
page.clock.set_fixed_time(datetime.datetime.now())
page.clock.set_fixed_time(datetime.datetime(2020, 2, 2))
page.clock.set_fixed_time("2020-02-02")
await page.clock.set_fixed_time(datetime.datetime.now())
await page.clock.set_fixed_time(datetime.datetime(2020, 2, 2))
await page.clock.set_fixed_time("2020-02-02")
参数
返回值
set_system_time
添加于:v1.45设置系统时间,但不触发任何定时器。使用此方法来测试网页如何对时间偏移做出反应,例如从夏令时切换到冬令时,或更改时区。
用法
- 同步
- 异步
page.clock.set_system_time(datetime.datetime.now())
page.clock.set_system_time(datetime.datetime(2020, 2, 2))
page.clock.set_system_time("2020-02-02")
await page.clock.set_system_time(datetime.datetime.now())
await page.clock.set_system_time(datetime.datetime(2020, 2, 2))
await page.clock.set_system_time("2020-02-02")
参数
返回值