跳至主要内容

时钟

准确模拟时间相关行为对于验证应用程序的正确性至关重要。了解更多关于clock emulation的信息。

请注意,clock是为整个BrowserContext安装的,因此所有页面和iframe中的时间都由同一个clock控制。


方法

快进

Added in: v1.45 clock.fast_forward

通过向前跳跃时间推进时钟。最多只触发一次到期的计时器。这相当于用户暂时合上笔记本电脑盖子,在给定时间后重新打开它。

用法

page.clock.fast_forward(1000)
page.clock.fast_forward("30:00")

参数

  • ticks int | str#

    时间可以是毫秒数来推进时钟,也可以是可读的字符串。有效的字符串格式包括:"08"表示8秒,"01:00"表示1分钟,"02:34:10"表示2小时34分10秒。

返回


安装

Added in: v1.45 clock.install

为以下与时间相关的函数安装模拟实现:

  • Date
  • setTimeout
  • clearTimeout
  • setInterval
  • clearInterval
  • requestAnimationFrame
  • cancelAnimationFrame
  • requestIdleCallback
  • cancelIdleCallback
  • performance

假定时器用于在测试中手动控制时间流。它们允许您推进时间、触发定时器并控制时间相关函数的行为。更多信息请参阅clock.run_for()clock.fast_forward()

用法

clock.install()
clock.install(**kwargs)

参数

  • time float | str | datetime (可选)#

    初始化时间,默认为当前系统时间。

返回


pause_at

Added in: v1.45 clock.pause_at

通过向前跳跃时间来推进时钟并暂停时间。一旦调用此方法,除非调用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")

为了获得最佳效果,建议在页面导航前安装时钟,并将其设置为略早于预期测试时间的时间。这样可以确保所有计时器在页面加载期间正常运行,防止页面卡住。一旦页面完全加载完毕,您可以安全地使用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("http://localhost:3333")
page.clock.pause_at(datetime.datetime(2024, 12, 10, 10, 0, 0))

参数

返回


恢复

Added in: v1.45 clock.resume

恢复计时器。一旦调用此方法,时间将继续流动,计时器将正常触发。

用法

clock.resume()

返回


run_for

Added in: v1.45 clock.run_for

推进时钟,触发所有与时间相关的回调。

用法

page.clock.run_for(1000);
page.clock.run_for("30:00")

参数

  • ticks int | str#

    时间可以是以毫秒为单位的数值,也可以是可读的字符串。有效的字符串格式包括:"08"表示8秒,"01:00"表示1分钟,"02:34:10"表示2小时34分10秒。

返回


set_fixed_time

Added in: v1.45 clock.set_fixed_time

使 Date.nownew Date() 始终返回固定的模拟时间,同时保持所有计时器正常运行。

在只需测试预定义时间的简单场景中使用此方法。对于更高级的场景,请改用clock.install()。阅读clock emulation文档以了解更多信息。

用法

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")

参数

返回


设置系统时间

Added in: v1.45 clock.set_system_time

设置系统时间,但不会触发任何计时器。使用此功能来测试网页对时间变化的反应,例如从夏令时切换到冬令时,或更改时区。

用法

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")

参数

返回