Перейти к основному содержимому

Clock

Точное моделирование поведения, зависящего от времени, необходимо для проверки корректности приложений. Узнайте больше о эмуляции часов.

Обратите внимание, что часы устанавливаются для всего BrowserContext, поэтому время на всех страницах и во всех фреймах контролируется одними и теми же часами.


Методы

fast_forward

Добавлено в: v1.45 clock.fast_forward

Перемещает часы вперед во времени. Таймеры срабатывают не более одного раза. Это эквивалентно закрытию крышки ноутбука на некоторое время и последующему открытию после указанного времени.

Использование

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

Аргументы

  • ticks int | str#

    Время может быть указано в миллисекундах или в виде строки. Допустимые форматы строк: "08" для восьми секунд, "01:00" для одной минуты и "02:34:10" для двух часов, 34 минут и десяти секунд.

Возвращает


install

Добавлено в: 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

Добавлено в: 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() для остановки часов.

# Инициализируйте часы на некоторое время до времени теста и дайте странице загрузиться
# естественным образом. `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))

Аргументы

  • time float | str | datetime#

    Время, на котором нужно остановиться.

Возвращает


resume

Добавлено в: v1.45 clock.resume

Возобновляет работу таймеров. После вызова этого метода время снова начинает течь, и таймеры срабатывают как обычно.

Использование

clock.resume()

Возвращает


run_for

Добавлено в: v1.45 clock.run_for

Перемещает часы вперед, срабатывая все связанные с временем обратные вызовы.

Использование

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

Аргументы

  • ticks int | str#

    Время может быть указано в миллисекундах или в виде строки. Допустимые форматы строк: "08" для восьми секунд, "01:00" для одной минуты и "02:34:10" для двух часов, 34 минут и десяти секунд.

Возвращает


set_fixed_time

Добавлено в: v1.45 clock.set_fixed_time

Заставляет 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")

Аргументы

  • time float | str | datetime#

    Время, которое нужно установить.

Возвращает


set_system_time

Добавлено в: 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")

Аргументы

  • time float | str | datetime#

    Время, которое нужно установить.

Возвращает