Skip to main content

Clock

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

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


Методы

fastForward

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

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

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

await page.clock.fastForward(1000);
await page.clock.fastForward('30:00');

Аргументы

  • ticks number | 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() для получения дополнительной информации.

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

await clock.install();
await clock.install(options);

Аргументы

  • options Object (необязательно)
    • time number | string | Date (необязательно)#

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

Возвращает


pauseAt

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

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

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

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

await page.clock.pauseAt(new Date('2020-02-02'));
await page.clock.pauseAt('2020-02-02');

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

// Инициализируйте часы с некоторым временем до времени теста и позвольте странице загружаться
// естественным образом. `Date.now` будет прогрессировать по мере срабатывания таймеров.
await page.clock.install({ time: new Date('2024-12-10T08:00:00') });
await page.goto('http://localhost:3333');
await page.clock.pauseAt(new Date('2024-12-10T10:00:00'));

Аргументы

  • time number | string | Date#

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

Возвращает


resume

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

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

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

await clock.resume();

Возвращает


runFor

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

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

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

await page.clock.runFor(1000);
await page.clock.runFor('30:00');

Аргументы

  • ticks number | string#

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

Возвращает


setFixedTime

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

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

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

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

await page.clock.setFixedTime(Date.now());
await page.clock.setFixedTime(new Date('2020-02-02'));
await page.clock.setFixedTime('2020-02-02');

Аргументы

  • time number | string | Date#

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

Возвращает


setSystemTime

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

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

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

await page.clock.setSystemTime(Date.now());
await page.clock.setSystemTime(new Date('2020-02-02'));
await page.clock.setSystemTime('2020-02-02');

Аргументы

  • time number | string | Date#

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

Возвращает