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分钟10秒。
返回值
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() 来暂停时钟。
- 同步
- 异步
# 在测试时间之前初始化时钟,让页面自然加载。
# 随着定时器的触发,`Date.now` 会正常推进。
page.clock.install(time=datetime.datetime(2024, 12, 10, 8, 0, 0))
page.goto("http://localhost:3333")
page.clock.pause_at(datetime.datetime(2024, 12, 10, 10, 0, 0))
# 在测试时间之前初始化时钟,让页面自然加载。
# 随着定时器的触发,`Date.now` 会正常推进。
await page.clock.install(time=datetime.datetime(2024, 12, 10, 8, 0, 0))
await page.goto("http://localhost: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分钟10秒。
返回值
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")
参数
返回值