Cypress использует встроенный браузер Electron для запуска тестов по умолчанию. Electron представляет собой фреймворк, основанный на Chromium и Node.js, что позволяет выполнять как веб-приложения, так и серверный JavaScript в единой среде. Понимание работы Cypress с Electron критически важно для эффективного тестирования и отладки.
Cypress запускается в двух процессах:
Main Process (Главный процесс Electron) Отвечает за управление окнами, взаимодействие с операционной системой и конфигурацию окружения. Этот процесс управляет жизненным циклом браузера, его настройками и системными событиями.
Renderer Process (Процесс рендеринга Electron) Выполняет тестируемое веб-приложение и код Cypress, взаимодействует с DOM, управляет сетью и событиями пользователя. Каждый открытый браузерный контент работает в отдельном renderer-процессе, что обеспечивает изоляцию тестов.
Важно понимать, что Cypress напрямую взаимодействует с renderer-процессом, выполняя команды и ассертирования через собственный драйвер, а Electron обеспечивает интерфейс и платформенную совместимость.
По умолчанию Cypress запускает тесты в Electron. Команды:
npx cypress open
npx cypress run
При этом без дополнительных настроек запускается встроенный Electron. Можно проверить текущий браузер через:
cy.task('getBrowser').then((browser) => {
console.log(browser);
});
Electron позволяет использовать headless-режим, что особенно важно для CI/CD:
npx cypress run --headless --browser electron
В headless-режиме браузер работает без визуального интерфейса, что ускоряет выполнение тестов и снижает потребление ресурсов.
Cypress позволяет настраивать Electron через
cypress.config.js:
const { defineConfig } = require('cypress');
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
on('before:browser:launch', (browser = {}, launchOptions) => {
if (browser.name === 'electron') {
launchOptions.preferences.width = 1280;
launchOptions.preferences.height = 720;
}
return launchOptions;
});
},
},
});
Ключевые моменты конфигурации:
Electron идеально подходит для автоматического запуска тестов на сервере:
npx cypress run --browser electron --headless
Для диагностики тестов используется:
cy.pause(); // Приостанавливает выполнение теста
cy.debug(); // Выводит состояние в консоль
Также можно открыть DevTools в headed-режиме:
npx cypress open --browser electron
Electron позволяет подключать инструменты профилирования и инспекции DOM, что облегчает выявление проблем с layout, JS-ошибками или нестабильностью тестов.
before:browser:launch и
after:browser:launch для тонкой настройки окружения
Electron.Electron в Cypress представляет собой мощный инструмент для стабильного и быстрого тестирования веб-приложений. Его интеграция с Node.js и Chromium обеспечивает высокую производительность, гибкость настройки и детализированную отладку, что делает его неотъемлемой частью современного тестирования на JavaScript.