Переключение локалей в Playwright связано с конфигурацией браузера и среды выполнения тестов. Локаль влияет на формат дат, чисел, валют, текст в интерфейсе, порядок сортировки и язык сообщений. Правильная настройка локали позволяет стабилизировать поведение интерфейса и уменьшить количество тестов со скрытыми региональными зависимостями.
Playwright позволяет задавать локаль на уровне браузера при создании
контекста. Основными параметрами выступают locale и
timezoneId, а также permissions, если тест
использует геолокацию или локализованные API.
Пример конфигурации:
const context = await browser.newContext({
locale: 'ru-RU',
timezoneId: 'Europe/Moscow'
});
Значение locale влияет на такие аспекты, как
форматирование Intl.DateTimeFormat,
Intl.NumberFormat и другие API интернационализации, широко
применяемые в современных веб-приложениях.
После установки локали важно удостовериться, что интерфейс корректно отображает язык и форматирование. Например, тестирование даты:
const dateText = await page.textContent('[data-testid="date"]');
expect(dateText).toBe('31.05.2024');
Важный момент: тест не должен зависеть от языка машины разработчика. Все ожидания должны базироваться на явно установленной локали.
Некоторые интерфейсы ожидают локализованные значения при вводе, например, цены или числа. При русской локали разделителем дробной части может быть запятая. Пример:
await page.fill('[data-testid="price"]', '1 234,56');
В таких случаях приложение должно корректно распознавать ввод согласно языковым правилам.
Многие интерфейсы используют Intl.NumberFormat для
форматирования денежных значений. Региональный формат влияет на
расположение валютного символа и пробелов:
new Intl.NumberFormat('ru-RU', {
style: 'currency',
currency: 'RUB'
}).format(1999);
// "1 999,00 ₽"
Если тесты проверяют отображение цен, понадобится жёсткое ожидание точной строки, иначе возможны ложные срабатывания.
Сортировка строк локализована и зависит от
Intl.Collator. Например, сортировка кириллических строк
отличается от сортировки по бинарному сравнению. При тестировании
списков и таблиц важно учитывать, что разные локали могут дать разный
порядок элементов.
В некоторых приложениях локаль можно менять динамически, например, переключателем языка. В таких случаях рекомендуется запускать тест от начального языка, затем изменять локаль через UI и повторять проверки. Пример проверки смены языка:
await page.click('[data-testid="locale-switch-ru"]');
await expect(page.locator('h1')).toHaveText('Настройки');
Важно наблюдать не только за текстами, но и за форматированием чисел, дат, валют и сообщениями системных уведомлений.
Многие ошибки связаны не с языком, а с временной зоной. Playwright
позволяет задавать timezoneId независимо от
locale. Например, дата, отображаемая в интерфейсе, может
отличаться на день при переходе через полуночь в другой временной зоне.
Для детерминированности тестов лучшей практикой является установка
фиксированного часового пояса.
const context = await browser.newContext({
locale: 'ru-RU',
timezoneId: 'Europe/Moscow'
});
Некоторые приложения определяют язык по местоположению. Тогда
требуется настроить geolocation и разрешения:
const context = await browser.newContext({
locale: 'ru-RU',
geolocation: { latitude: 55.7558, longitude: 37.6173 },
permissions: ['geolocation']
});
При наличии таких зависимостей тест становится ближе к поведению реального пользователя.
Скриншоты часто используются для визуального сравнения. Локаль влияет на тексты и форматирование, что делает сравнение чувствительным к региону. Желательно иметь отдельные эталоны для разных локалей или использовать стратегию сравнения, учитывающую только структуру.
Ключевые аспекты стабильности:
locale и timezoneId не
только в тестах, но и в конфигурации CI.Локаль не всегда равна языку интерфейса. Пример: локаль
ru-RU, но интерфейс на английском, либо наоборот. При
тестировании часто требуется изменять язык UI через конфигурацию
приложения, а локаль использовать только для форматированного вывода.
Разделение этих concerns делает тесты более гибкими и предотвращает
путаницу.
Playwright позволяет задать локаль глобально через
playwright.config.js, что удобно для больших наборов
тестов:
use: {
locale: 'ru-RU',
timezoneId: 'Europe/Moscow'
}
Такое решение устраняет дублирование и укрепляет консистентность.
Интернационализированные приложения требуют тестирования нескольких языков. Обычно это достигается параметризацией:
ru-RU;en-US;de-DE.При большом количестве локалей стоит выделять критические пути, а не множить весь набор тестов.
Некоторые тесты зависят от внешних данных: API, базы данных или конфигурационных файлов. Данные могут содержать локализованные строки, валюту, форматированные числа. Для стабильности таких тестов лучше использовать тестовые фикстуры с локализованными значениями, а не реальные производственные данные.
Наиболее частые проблемы:
Для диагностики полезно выводить navigator.language,
Intl.DateTimeFormat().resolvedOptions() и
Int.NumberFormat().resolvedOptions() через
page.evaluate(...). Это позволяет убедиться, что локаль
действительно применена.
Локаль влияет на интерфейс сильнее, чем кажется на первый взгляд. Без её контроля тесты становятся нестабильными, особенно при работе с датами, валютами и текстами. Оптимальный подход — всегда задавать локаль явно, изолировать влияние локализации и проверять её как функциональную часть приложения.