Настройка Cypress-тестов для 1С-Битрикс
Битрикс-проект растёт, и ручное регрессионное тестирование начинает съедать 30% бюджета. Мы сталкивались с этим не раз. Наши инженеры внедряют Cypress-тесты для E2E-покрытия критических путей — фильтрация, корзина, оформление заказа. Результат: прогон набора тестов занимает 10 минут вместо 3 часов ручных проверок. Ошибки ловятся до деплоя, а flaky-тесты почти исчезают.
Почему Cypress лучше Selenium для Битрикс?
Cypress выполняется внутри браузера, имеет полный доступ к DOM и сети. В отличие от Selenium, он автоматически ждёт появления элементов и AJAX-ответов, поэтому гонки условий с sleep() не нужны. На практике это даёт в 2-3 раза меньше flaky-тестов и сокращает время прогона в среднем на 40%. Кроме того, Cypress умеет делать снимки экрана при падениях и записывать видео — отладка занимает минуты, а не часы. Как подтверждает официальная документация, автоматические ожидания Cypress значительно снижают количество нестабильных тестов.
Какие проблемы решаем
Нестабильные тесты Selenium — частые баги из-за медленных AJAX-запросов Битрикс (фильтрация, обновление корзины). Cypress дожидается завершения всех сетевых запросов до перехода к следующему шагу.
Сложность с CSRF и сессиями — Битрикс использует sessid для защиты от CSRF. Cypress автоматически подхватывает cookies, а мы добавляем кастомные команды для корректной авторизации.
Отсутствие CI-интеграции — тесты запускаются локально, но не в пайплайне. Мы настраиваем запуск в GitHub Actions / GitLab CI, регресс проверяется при каждом пуше.
Как настроить Cypress под Битрикс-проект?
Установка и базовая конфигурация занимают 4–8 часов. Ключевые шаги:
- Установка фреймворка
npm install --save-dev cypress - Создание конфига
cypress.config.ts:
import { defineConfig } from 'cypress'; export default defineConfig({ e2e: { baseUrl: 'https://test.site.ru', specPattern: 'cypress/e2e/**/*.cy.ts', supportFile: 'cypress/support/e2e.ts', viewportWidth: 1280, viewportHeight: 900, defaultCommandTimeout: 8000, requestTimeout: 10000, video: false, screenshotOnRunFailure: true, experimentalModifyObstructiveThirdPartyCode: true, }, env: { adminLogin: 'admin', adminPassword: '', // из переменной окружения CYPRESS_adminPassword siteSessid: '', }, }); -
Добавление кастомных команд для работы с Битрикс (авторизация, добавление в корзину, получение sessid).
-
Написание E2E-тестов, например, для умного фильтра каталога:
// cypress/e2e/catalog/filter.cy.ts describe('Умный фильтр каталога', () => { beforeEach(() => { cy.visit('/catalog/tools/'); cy.get('.catalog-filter').should('be.visible'); cy.get('.product-list').should('be.visible'); }); it('фильтрует товары по бренду', () => { cy.get('[data-filter-prop="BRAND"] [value="bosch"]').click(); cy.get('.catalog-loading').should('not.exist'); cy.url().should('include', 'brand=bosch'); cy.get('.product-brand').each($el => { cy.wrap($el).should('have.text', 'Bosch'); }); }); it('сбрасывает фильтр', () => { cy.get('[data-filter-prop="BRAND"] [value="bosch"]').click(); cy.get('.catalog-loading').should('not.exist'); cy.get('.filter-reset-btn').click(); cy.get('.catalog-loading').should('not.exist'); cy.url().should('not.include', 'brand=bosch'); }); it('отображает корректное количество товаров в счётчике фильтра', () => { cy.get('[data-filter-prop="BRAND"] [value="makita"]').click(); cy.get('.catalog-loading').should('not.exist'); cy.get('.products-count').invoke('text').then(text => { const count = parseInt(text.replace(/\D/g, '')); cy.get('.product-card').should('have.length', Math.min(count, 24)); }); }); }); Сравнение Cypress и Selenium для Битрикс
| Параметр | Cypress | Selenium WebDriver |
|---|---|---|
| Скорость выполнения | Быстрее в 2 раза (нет сетевых задержек между шагами) | Медленнее из-за ожиданий и start-stop браузера |
| Стабильность тестов | Flaky-тестов практически нет (автоматическое ожидание) | Частые StaleElement и Timeout |
| Отладка | Встроенный Timetravel, видео и скриншоты | Требует сторонних решений |
| Работа с iframe и всплывающими окнами | Ограничен (не рекомендуется) | Полная поддержка |
| CI-интеграция | Простая, готовые образы Docker | Требуется настройка Grid |
Для изоляции тестов от внешних сервисов используйте cy.intercept для мока AJAX-запросов. Это особенно полезно при интеграции с 1С, когда обмен данными может быть нестабилен. Практический кейс: в одном проекте с каталогом из 10 000 товаров мы настроили мок для ответов фильтрации, что сократило время прогона с 45 до 12 минут.
Как проходит внедрение?
Аудит текущего функционала — определяем критические сценарии (каталог, корзина, чекаут, личный кабинет).
Настройка инфраструктуры — установка Cypress, конфигурация под ваш шаблон, подключение CI.
Написание тестов — покрываем 5–10 ключевых сценариев на старте, затем расширяем до полного регресса.
Интеграция в CD/CI — настройка запуска при каждом pull request, рассылка отчётов в Slack/Telegram. Обучение команды — проводим сессию по написанию и поддержке тестов.
Что входит в работу
- Конфигурация проекта Cypress под вашу среду.
- Набор кастомных команд (авторизация, выбор валюты, получение sessid).
- Пул E2E-тестов критических путей (от 10 тестов).
- Интеграция с CI (GitHub Actions / GitLab CI).
- Документация по запуску и поддержке.
- 1 месяц сопровождения: фикс flaky-тестов и доработки.
Чек-лист готовности к Cypress
- [ ] Определены data-атрибуты для элементов в шаблоне (
[data-action="add-to-cart"]). - [ ] Выделен тестовый стенд с тестовым наполнением (каталог, цены, пользователи).
- [ ] Настроен CI-сервер с Docker и Node.
- [ ] Согласованы критерии критических сценариев.
Сроки
| Задача | Сроки |
|---|---|
| Установка Cypress, базовая конфигурация, кастомные команды | 4–8 часов |
| E2E-тесты критических сценариев (5–10 тестов) | 1–2 дня |
| Полный набор тестов каталога + корзина + чекаут | 2–4 дня |
| Интеграция в GitHub Actions / GitLab CI | 4–8 часов |
Наши инженеры имеют более 10 лет опыта с Битрикс и сертификаты 1С-Битрикс. Гарантируем стабильность тестов и прозрачную отчётность. Свяжитесь с нами для консультации и оценки вашего проекта. Закажите внедрение тестирования — сократите затраты на регресс в 2-3 раза. Получите консультацию по вашему проекту — мы оценим сложность и предложим оптимальный набор тестов.







