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

Clock

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

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


Методы

fastForward

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

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

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

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

Аргументы

  • ticks long | String#

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

Возвращает


install

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

Устанавливает фиктивные реализации для следующих функций, связанных со временем:

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

Фиктивные таймеры используются для ручного управления потоком времени в тестах. Они позволяют вам перемещать время, запускать таймеры и контролировать поведение функций, зависящих от времени. См. Clock.runFor() и Clock.fastForward() для получения дополнительной информации.

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

Clock.install();
Clock.install(options);

Аргументы

  • options Clock.InstallOptions (опционально)
    • setTime long | String | Date (опционально)#

      Время для инициализации, по умолчанию текущее системное время.

Возвращает


pauseAt

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

Перемещает часы, прыгая вперед во времени, и останавливает время. После вызова этого метода таймеры не запускаются, если не вызваны Clock.runFor(), Clock.fastForward(), Clock.pauseAt() или Clock.resume().

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

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

SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd");
page.clock().pauseAt(format.parse("2020-02-02"));
page.clock().pauseAt("2020-02-02");

Для достижения наилучших результатов установите часы перед навигацией по странице и установите их на время, немного предшествующее предполагаемому времени теста. Это гарантирует, что все таймеры будут работать нормально во время загрузки страницы, предотвращая зависание страницы. После полной загрузки страницы вы можете безопасно использовать Clock.pauseAt() для остановки часов.

// Инициализируйте часы с некоторым временем до времени теста и дайте странице загрузиться
// естественным образом. `Date.now` будет прогрессировать по мере запуска таймеров.
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss");
page.clock().install(new Clock.InstallOptions().setTime(format.parse("2024-12-10T08:00:00")));
page.navigate("http://localhost:3333");
page.clock().pauseAt(format.parse("2024-12-10T10:00:00"));

Аргументы

  • time long | String | Date#

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

Возвращает


resume

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

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

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

Clock.resume();

Возвращает


runFor

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

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

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

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

Аргументы

  • ticks long | String#

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

Возвращает


setFixedTime

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

Заставляет Date.now и new Date() всегда возвращать фиксированное фиктивное время, при этом все таймеры продолжают работать.

Используйте этот метод для простых сценариев, где вам нужно протестировать с предопределенным временем. Для более сложных сценариев используйте Clock.install(). Прочтите документацию по эмуляции часов, чтобы узнать больше.

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

page.clock().setFixedTime(new Date());
page.clock().setFixedTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setFixedTime("2020-02-02");

Аргументы

  • time long | String | Date#

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

Возвращает


setSystemTime

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

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

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

page.clock().setSystemTime(new Date());
page.clock().setSystemTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setSystemTime("2020-02-02");

Аргументы

  • time long | String | Date#

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

Возвращает