E2E · Safari · QA 2026

Таблица «подводных камней» фронтенда 2026:
Cypress WebKit и Safari на удалённом Mac

01.04.2026 MacWww Lab 9 мин чтения

Команды арендуют удалённый Mac ради нативных браузеров Apple, а затем считают зелёный прогон Cypress WebKit доказательством поведения Safari. Этот разрыв тащит в прод баги вёрстки и медиа, пока постоянная видеозапись забивает SSD. Ниже — сравнительная таблица с Safari, пути кэша и параметры установки, переключатели video и screenshot, воркеры и пороги retry, а также три шага приёмки. Дополнительно: матрица Vitest/jsdom и WebKit и Playwright WebKit на удалённом Mac.

01 Сценарии Cypress + WebKit

Cypress с драйвером WebKit уместен, когда вы уже живёте в API Cypress и хотите на одном образе Apple Silicon крутить и Chromium, и WebKit по конвейеру macOS. Это хороший слой регрессии для SPA со стабильными селекторами и потоками средней длины: быстрее поднимать контур, чем писать второй стек только ради Safari.

Не полагайтесь на Cypress WebKit в одиночку для продуктов с упором на видео, строгими сценариями хранения или тяжёлым WebGL, если аналитика показывает расхождение между автоматизационным WebKit и тем билдом Safari, который реально стоит у пользователей. Держите Cypress быстрым и дешёвым по диску, а для паритета добавляйте смоук в Safari.app на том же хосте — иначе вы экономите минуты CI ценой часов саппорта.

Для fullstack-команд полезно явно записать в DoD: «критичные для Safari сценарии подтверждены вручную или отдельным контуром в Dock-браузере». Общий контекст Node/npm и Safari на арендованном Mac — в чек-листе совместимости фронтенда на удалённом Mac.

02 Сравнительная таблица с настоящим Safari

Три частых промаха: 1) ложная уверенность — зелёный WebKit не ловит все эффекты ITP, режима энергосбережения и отдельных кодеков; 2) стоимость видео — непрерывная запись добивает общие диски на Mac Mini в пуле; 3) retries без бюджета маскируют флаки. Cypress WebKit — это бандл движка, привязанный к версии Cypress; Safari.app — системный браузер со своим циклом релизов. Используйте таблицу при планировании покрытия.

Измерение Cypress WebKit (удалённый Mac) Safari.app (тот же хост) Практический вывод
Соответствие движка Автоматизационный WebKit, закреплённый Cypress Системный Safari с собственным графиком обновлений Сверяйте мажорные версии с основной когортой пользователей
GPU и композитинг Реальный стек Metal, но сценарий запуска headful/headed по конфигу Полноценная пользовательская сессия и эффекты оконного сервера После автотестов перепроверяйте HDR, полноэкранное видео и canvas
Autoplay и медиа Близко к WebKit, но не тождественно ручному просмотру Жесты, Low Power Mode, фоновые вкладки Для OTT и вебинаров — отдельный ручной прогон
ITP и cookie Задействует часть путей хранения WebKit Полные правила межсайтового трекинга как в поставке Проверяйте логин после условного сброса ITP

03 Кэш бинарников и параметры установки на удалённом Mac

Каталог по умолчанию: ~/Library/Caches/Cypress. На общих пулах удалённых Mac задайте CYPRESS_CACHE_FOLDER на персистентный путь; в образе выполните npx cypress install и убедитесь, что каталог существует до параллельных спеков. Для жёстко изолированных сетей используйте CYPRESS_INSTALL_BINARY (путь к заранее скачанному архиву) или значение 0, чтобы отключить загрузку и положиться на предпрогретый кэш; после обновления версии в lockfile выполняйте npx cypress install --force, чтобы не остаться на старом бандле WebKit. В логах фиксируйте версию Cypress, семейство браузера и свободное место: при включённом video ориентируйтесь на порядка двухсот гигабайт запаса на томе артефактов. Для разбора падений и артефактов заведите отдельный runbook триажа логов E2E в репозитории.

Мини-чек-лист перед параллельным WebKit
  • Закрепить версии в package-lock; ключ кэша CI совпадает с образом агента.
  • Изолировать CYPRESS_CACHE_FOLDER по тенанту на shared-хостах.
  • Смоук-спека логирует cy.browser в первой строке отчёта.
  • Ретеншн видео: удалять файлы старше семи дней по cron.

Пять шагов runbook до масштабирования WebKit:

  1. Пропишите CYPRESS_CACHE_FOLDER в env CI и создайте каталог с владельцем runner.
  2. После установки выполните npx cypress verify, чтобы job падал сразу при битых бинарниках.
  3. Записывайте имя и версию браузера из первой спеки в дашборд аудита.
  4. Монтируйте артефакты по ключу GITHUB_SHA (или аналогу), чтобы повторные прогоны не затирали видео.
  5. Назначьте еженедельную уборку кэша по правилу ретеншна, не трогая свежие билды.

04 Переключатели video и screenshot

Для PR-джобов держите video: false; включайте запись на main или ночных прогонах WebKit. screenshotOnRunFailure: true обычно оставляют включённым: скриншот дешевле минуты видео. Всплески флаков лечите точечным env на уровне спеки, а не глобальным video: true на весь репозиторий.

Видео на флоте Mac — налогооблагаемый ресурс: именуйте файлы по SHA коммита и политике ветки. Если артефакты грузятся в S3 или внутренний store, включайте lifecycle policy синхронно с таблицей приёмки, иначе счёт за хранение съест экономию от «просто включим везде».

05 Параллельные воркеры и пороги повторов

Параллелизм в Cypress измеряется машинами, а не бесконечными потоками в одном процессе. Стартуйте с ориентира около одной WebKit-джобы на восемь производительных ядер при включённом video. Для retries.runMode на основной ветке WebKit разумно один повтор, на PR — ноль; в openMode держите ноль или один повтор, чтобы локальные прогоны не маскировали нестабильные шаги. Если за спринт более двух процентов прогонов спасаются только retry, поднимать пороги нельзя — чините ожидания и селекторы.

Проверка Параметр Критерий прохождения
Конкурентность Параллельные машины vs ядра Нет устойчивой загрузки CPU > 90% в стабильной фазе WebKit
Повторы runMode — число retry Каждый «спасённый» билд с владельцем и ссылкой на тикет
Артефакты video on/off PR по умолчанию без video; main — запись при падении
Таймауты defaultCommandTimeout Рост только для известных медленных команд, не глобальное удвоение

06 Три шага приёмки перед публикацией

Релиз допускайте только если все три шага ссылаются на один и тот же артефакт сборки и манифест среды (версии macOS, Node, Cypress, hash зависимостей).

  • Шаг 1: Сверить минорные версии Cypress, Node и macOS; прогреть CYPRESS_CACHE_FOLDER на агенте.
  • Шаг 2: Согласовать video, скриншоты, число машин и retry с таблицей политики для данной ветки/релиза.
  • Шаг 3: Прогнать P0 в Safari.app на том же Mac — холодный старт и фоновая вкладка — приложить скрин или чек-лист к тикету.
Ориентиры для документации

200 ГБ свободного места при активном video, не более 2% «флаковых» retry за спринт, ретеншн видео на shared-хостах 7 дней.

Главная · Покупка / аренда · Помощь · Блог · Vitest и WebKit · Playwright и Safari

Нативная QA на Apple

Арендуйте удалённый Mac под Cypress WebKit и ручной Safari

Запускайте headed WebKit в CI и финальные проверки в Safari на одном Apple Silicon. Ознакомьтесь с оформлением заказа, тарифами и инструкциями по доступу без обязательного входа, затем откройте другие статьи о фронтенде в блоге.

Политика видео Паритет Safari Выделенный Mac
Mac для Cypress