Project в Playwright - это именованная конфигурация прогона, и её главное назначение не "прогнать во всех браузерах на всякий случай", а описать важные пользовательские среды. Реальные пользователи приходят с разных устройств, из разных стран, с разными настройками локали и часового пояса. Projects позволяют выразить именно эти значимые различия - и проверить, что критический путь работает в тех средах, которые действительно есть у вашей аудитории.
Базовый project описывает устройство и браузер через готовые devices. desktop-chrome берёт настройки настольного Chrome, mobile-safari - профиль конкретного телефона вроде iPhone 15 с его вьюпортом, user agent и тач-событиями. Это не эмуляция "примерно мобильного": device-профиль задаёт согласованный набор параметров, воспроизводящий реальную среду устройства, чтобы мобильный сценарий проверялся в условиях, близких к настоящим.
Через use в project настраивают и региональные различия. locale и timezoneId задают язык интерфейса и часовой пояс - это важно для приложений, где от локали зависит формат дат, валют и сам контент. Проект с locale 'uz-UZ' и timezoneId 'Asia/Tashkent' проверяет, что интерфейс корректно ведёт себя для узбекистанского пользователя, а не только в дефолтной локали разработчика. Туда же относятся права, геолокация и цветовая схема.
Полезно один раз увидеть осмысленную матрицу проектов - не механическое перемножение всего на всё, а выбранные значимые среды. Ниже - три проекта: настольный Chrome, мобильный Safari и локаль Узбекистана поверх настольного Chrome. К этой форме возвращаются, проектируя матрицу под конкретную аудиторию, а не копируя чужой список браузеров без разбора.
Ключевое решение - не умножать каждый тест на каждую среду бездумно. Полная матрица "все тесты во всех браузерах и устройствах" растёт мультипликативно и быстро превращает прогон в часы ожидания без пропорциональной пользы. Большинство различий сред не влияет на большинство сценариев, и гонять глубокий regression в шести конфигурациях - это платить временем за уверенность, которую вы уже получили в одной.
Разумная стратегия делит проверки по назначению. Быстрый smoke-набор - несколько самых критичных путей - можно гонять широкой матрицей, потому что он короткий, а совместимость дорога именно на ключевых сценариях. Глубокий regression держат на основном браузере, добавляя к нему лишь выбранные проверки совместимости там, где риск реален: специфичный для WebKit рендеринг, мобильный layout, региональные форматы.
За выбором матрицы стоит анализ риска, а не привычка. Прежде чем добавить проект, стоит спросить: какой конкретный риск он ловит и стоит ли этот риск удвоения времени прогона? WebKit оправдан, если вы обещаете Safari; узбекская локаль - если у вас есть такие пользователи; мобильный профиль - если мобильный трафик значим. Проект без названного риска - это просто налог на каждый прогон.
Типичные провалы матрицы предсказуемы. Механическое перемножение всех тестов на все браузеры и устройства - многочасовой прогон без пропорциональной пользы. Отсутствие мобильного или регионального проекта там, где аудитория именно такая, - непроверенная реальная среда. И добавление браузера "на всякий случай" без названного риска - налог на время без отдачи. Описывайте проектами значимые среды вашей аудитории и стройте матрицу от риска, а не от полноты перебора.
projects: [
{
name: 'desktop-chrome',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'mobile-safari',
use: { ...devices['iPhone 15'] },
},
{
name: 'uz-locale', // значимая среда: узбекистанский пользователь
use: {
...devices['Desktop Chrome'],
locale: 'uz-UZ',
timezoneId: 'Asia/Tashkent',
},
},
]