Интеграция6 мин чтения

Проверка часовых поясов Австралии в Playwright

12 проверок часов браузера для Австралии в Playwright, включая 30-минутный переход Лорд-Хау. Отделите фиксированное UTC, пояс браузера и раннер Node.

На этой странице

Задайте в Playwright браузерный timezoneId, зафиксируйте явный момент времени в UTC, а затем проверьте дату, которую показывает ваша страница. Часовой пояс раннера Node держите отдельно: настройка браузера его не меняет. Playwright описывает это различие в разделе о локали и часовом поясе.

Скрипт для скачивания ниже даёт 12 воспроизводимых австралийских случаев: Сидней и Брисбен в два сезона, получасовое смещение Брокен-Хилла и 30-минутный переход на летнее время на острове Лорд-Хау. Он сам поднимает небольшую страницу на 127.0.0.1, считывает часы, отрисованные в Chromium, и сохраняет проверки в JSON. Ни прокси, ни учётные данные не нужны.

Запустите проверку часов

Нужен Node.js 24. В оболочке macOS или Linux:

sh
mkdir australia-clock-demo
cd australia-clock-demo
curl --fail --silent --show-error --output australia-clock-check.mjs https://ipvolt.com/downloads/australia-clock-check.mjs
npm install --no-audit --no-fund --save-exact playwright@1.63.0
npx playwright install chromium
TZ=UTC node australia-clock-check.mjs > results-utc.json

Скрипт и README доступны напрямую. Сравните свой вывод с эталонным JSON, где есть все проверки и описание окружения, или с эталонным CSV, где собраны отдельные поля строк.

Успешный запуск завершается с кодом 0 и сообщает summary.allPassed: true, а также total: 12 и passed: 12. Сюда входят ожидаемые соотношения часов и проверки запросов и ошибок. Код 1 вместе с JSON результата означает, что не прошла одна из проверок. Ошибка запуска или зависимостей в стандартном потоке ошибок означает сбой настройки; если Chromium не стартует в Linux, проверьте системные зависимости браузеров Playwright.

Для каждой строки скрипт создаёт новый контекст браузера, задаёт его timezoneId и до загрузки страницы вызывает page.clock.setFixedTime(new Date(test.utc)). Входное значение UTC оканчивается на Z, поэтому оно обозначает один и тот же момент при любом окружении раннера. setFixedTime фиксирует значения, которые возвращают Date.now() и new Date(), а таймеры продолжают работать как обычно; эта фикстура проверяет отрисованные даты. API фиксированного времени в Playwright

Сохраните австралийские исключения в тестовых случаях

Эти восемь строк используют полночь по UTC 15 января 2026 года и 15 июля 2026 года. Смещения ниже указаны к востоку от UTC. В JSON они выражены в минутах, со знаком, противоположным getTimezoneOffset() в JavaScript.

timezoneId браузераЯнварь: местное время / смещение от UTCИюль: местное время / смещение от UTC
Australia/Sydney11:00 / +11:0010:00 / +10:00
Australia/Brisbane10:00 / +10:0010:00 / +10:00
Australia/Broken_Hill10:30 / +10:3009:30 / +09:30
Australia/Lord_Howe11:00 / +11:0010:30 / +10:30

Сидней и Брисбен совпадают в июле, но в январе расходятся на час. Брокен-Хилл и Лорд-Хау тоже не дают свести «NSW» к одному ожидаемому времени. В определениях времени и исключениях Нового Южного Уэльса описаны эти смещения и сказано, что в Квинсленде нет летнего времени. Эталонные результаты фиксируют, что этот запуск Chromium отрисовал в заданные моменты.

Оставшиеся четыре строки охватывают смоделированные переходы 4 октября 2026 года. В каждой паре UTC сдвигается на одну секунду:

Пояс браузераСнимки UTC 3 октября 2026 годаМестные снимки 4 октября 2026 годаИзменение смещения
Australia/Lord_Howe15:29:59 → 15:30:0001:59:59 → 02:30:00+10:30 → +11:00
Australia/Sydney15:59:59 → 16:00:0001:59:59 → 03:00:00+10:00 → +11:00

Это синтетические снимки с фиксированным временем, выполненные 26 сентября 2026 года по UTC. Октябрьские входные значения имитируют будущие моменты по правилам, проверенным в тот день; они не фиксируют реальный переход и не проверяют таймер, работающий во время него. Ожидаемые даты и смещения опираются на сезонные даты NSW и правила IANA для Австралазии. На Лорд-Хау часы переводят на 30 минут, и в этой паре это происходит на 30 минут раньше по UTC, чем в Сиднее.

Смените пояс раннера, не меняя результат браузера

Запустите тот же файл, задав Перт как часовой пояс раннера Node:

sh
TZ=Australia/Perth node australia-clock-check.mjs > results-perth.json

Сравните 12 объектов rows[].browser с results-utc.json. Они должны совпасть. Объекты runner должны различаться: запуск в UTC сообщает смещение 0, а Перт сообщает 480 минут к востоку от UTC. Раннером управляет переменная окружения TZ в Node.

Оба записанных запуска прошли все 12 строк с одинаковыми показаниями браузера. JSON-файлы целиком будут различаться, потому что в них сохраняются ещё и метки времени выполнения и метаданные раннера. Такое сравнение помогает заметить ожидаемое значение, случайно вычисленное в местном поясе раннера.

Убедитесь, что проверки отклоняют ошибку

В скрипте есть три намеренно неверных режима. Запускайте каждую команду отдельно, если ваша оболочка или задание CI останавливается после ненулевого кода выхода:

sh
TZ=UTC node australia-clock-check.mjs one-nsw-clock > wrong-nsw.json
TZ=UTC node australia-clock-check.mjs one-hour-dst > wrong-dst.json
TZ=UTC node australia-clock-check.mjs omit-browser-timezone > wrong-browser-zone.json
РежимНамеренная ошибкаЗаписанные непройденные строки
one-nsw-clockОжидать для Брокен-Хилла и Лорд-Хау смещение Сиднея в тот же момент.5 из 12
one-hour-dstОжидать, что стандартное смещение Лорд-Хау +10:30 вырастет на целый час.2 из 12
omit-browser-timezoneУбрать настройку браузера, сохранив австралийские ожидания при раннере в UTC.12 из 12

Каждый режим должен завершаться с кодом 1. Первые два намеренно меняют ожидаемые значения; третий убирает настройку браузера. Они показывают, что именно эти ошибки обнаруживаются. В wrong-nsw.json пять непройденных идентификаторов относятся к Брокен-Хиллу в январе и июле, Лорд-Хау в июле и обоим пограничным снимкам Лорд-Хау. В wrong-dst.json Лорд-Хау в январе и снимок после перехода отклоняют выдуманное смещение +11:30.

При неожиданном сбое в обычном запуске посмотрите summary.failed и assertions этой строки:

Непройденная проверкаЧто смотреть дальше
fixedInstantУбедитесь, что вход UTC задан явно и что фиксированное время установлено до того, как страница прочитает часы.
requestedTimezoneУбедитесь, что страница принадлежит контексту с запрошенным timezoneId.
expectedOffset или expectedWallTimeПроверьте дату строки, пояс, знак смещения и действующие правила, прежде чем менять ожидание.
renderedEqualsSampledИзучите ошибки страницы и любую разницу между отрисованными часами и более поздним показанием браузера.

Если все строки проходят, но summary.allPassed равно false, изучите ещё relationshipsMinutes, requests, blockedRequests и pageErrors. Фикстура требует заявленных соотношений смещений, ровно 12 запросов к своей loopback-странице и отсутствия заблокированных запросов страницы и ошибок страницы.

Примените эти настройки к своей странице

Выберите отображение даты или расписание, ожидаемое поведение которого вы можете сформулировать. Сохраните явный вход UTC и браузерный timezoneId, а проверку видимых часов фикстуры замените проверкой этого элемента в собственном тесте. Сам скачиваемый скрипт не принимает внешний целевой URL.

Для первого сравнения держите остальные входные данные постоянными: локаль, сохранённые настройки, конфигурацию приложения и тестовые данные. Если приложение намеренно форматирует расписание в фиксированном деловом поясе, проверяйте именно это поведение. Метке времени, сформированной сервером, или настройке часового пояса на уровне аккаунта нужна своя подготовка; одна лишь эмуляция в браузере не задаёт ни то, ни другое.

Начните с подходящей пары январь/июль, затем добавьте пограничный случай, который поддерживает ваше приложение. При разборе расхождения сохраняйте непройденный вход и запись об окружении из JSON. Если менять ожидаемый результат только ради совпадения с запуском браузера, независимая проверка исчезнет.

Если приложение ещё и принимает решение по местоположению IP-адреса запроса, используйте отдельный тест местоположения выхода. Страница выбора прокси для Австралии объясняет, как выбрать доказательства местоположения, которые нужны такому правилу.

Метод и ограничения

Записанные запуски использовали Node.js 24.20.0, Playwright 1.63.0 и Chromium 153.0.8010.12 на macOS arm64. После установки зависимостей каждый запуск сделал 12 запросов к собственной loopback-странице, без единой попытки страницы обратиться к другому источнику и без ошибок страницы. Ожидаемые смещения взяты из первичных источников выше; скрипт сравнивал отрисованные часы страницы со вторым показанием браузера.

Это охватывает один браузерный движок и одну ОС в 12 заявленных случаях. Отсюда не следуют выводы о ходе таймеров, о повторяющемся времени при переводе часов назад, обо всех территориях Австралии, о поведении вашего приложения или о географии австралийских IP-адресов. Проверялся источник IANA версии 2026d. Значение nodeTz: 2026a в результатах описывает данные о часовых поясах в Node; версия внутренней базы Chromium не измерялась. Сохраняйте сведения о версиях и перепроверяйте правила при обновлении или выборе новых дат.

Наличие австралийских прокси не подтверждено. Получите ранний доступ. Одно письмо, когда откроется доступ. Больше ничего.

Источники и дополнительное чтение

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