После обновления торгового каталога на сайте 1С-Битрикс перестал работать умный фильтр на третьей странице. Покупатель не мог найти товар — конверсия упала на 12% до того, как заметил разработчик. Настройка Selenium-тестов для 1С-Битрикс позволяет выявлять такие регрессии за минуты. Ручное тестирование регрессий — дорого и ненадёжно. Для Битрикс-сайтов, где бизнес-логика расползается по PHP-компонентам и JavaScript, Selenium — наиболее подходящий инструмент: он тестирует реальный браузер через Selenium WebDriver, а не моки. Мы настраиваем Selenium-тесты под ключ, встраиваем в CI/CD и обучаем команду.
Автоматизация регрессионного тестирования: почему это необходимо?
Каждый релиз на живом магазине — риск. Если фильтр каталога перестал работать, это сразу видно в тестах. Selenium проверяет реальный браузер: он кликает, ждёт AJAX, проверяет DOM. Эмуляция через mocks не даёт такой уверенности. Для Битрикс, где часто используются кастомные JavaScript-сборки, это единственный способ гарантировать, что пользовательский сценарий не сломан. Согласно документации, Selenium Project утверждает, что headless-режим ускоряет выполнение тестов на 40%, а параллельный запуск в Grid сокращает время прогона ста тестов до 10 минут.
Как настроить Selenium-тесты для Битрикс?
Инфраструктура Selenium для Битрикс
Selenium WebDriver + Java или Python — классический стек. Для PHP-проектов предпочтительнее PHP-обёртки: php-webdriver/webdriver (Facebook PHP WebDriver) или Codeception с модулем WebDriver.
Минимальная инфраструктура:
Тесты (PHP/Python) → Selenium WebDriver → ChromeDriver/GeckoDriver → Браузер → Битрикс-сайт
Для CI/CD — Selenium Grid или Selenium Standalone в Docker:
docker-compose.selenium.yml
services:
selenium-chrome:
image: selenium/standalone-chrome:latest
ports:
- "4444:4444"
environment:
- SE_NODE_MAX_SESSIONS=3
shm_size: 2g
Конфигурация для тестирования Битрикс-окружения
// tests/selenium/SeleniumTestCase.php
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverExpectedCondition;
abstract class BitrixSeleniumTest extends PHPUnit\Framework\TestCase
{
protected RemoteWebDriver $driver;
protected string $baseUrl = 'https://test.site.ru';
protected function setUp(): void
{
$caps = DesiredCapabilities::chrome();
$caps->setCapability('goog:chromeOptions', [
'args' => ['--headless', '--no-sandbox', '--disable-dev-shm-usage'],
]);
$this->driver = RemoteWebDriver::create(
'http://localhost:4444/wd/hub',
$caps,
30000, // таймаут подключения
30000 // таймаут запроса
);
$this->driver->manage()->window()->setSize(
new \Facebook\WebDriver\WebDriverDimension(1280, 900)
);
}
protected function tearDown(): void
{
$this->driver->quit();
}
protected function waitForElement(string $selector, int $seconds = 10): \Facebook\WebDriver\WebDriverElement
{
return $this->driver->wait($seconds)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(
WebDriverBy::cssSelector($selector)
)
);
}
protected function loginAsAdmin(): void
{
$this->driver->get($this->baseUrl . '/bitrix/admin/');
$this->driver->findElement(WebDriverBy::name('USER_LOGIN'))->sendKeys('admin');
$this->driver->findElement(WebDriverBy::name('USER_PASSWORD'))->sendKeys(getenv('BITRIX_ADMIN_PASS'));
$this->driver->findElement(WebDriverBy::cssSelector('[type=submit]'))->click();
}
}
Тест критических пользовательских сценариев
// tests/selenium/CheckoutFlowTest.php
class CheckoutFlowTest extends BitrixSeleniumTest
{
public function testAddToCartAndCheckout(): void
{
// 1. Открываем карточку товара
$this->driver->get($this->baseUrl . '/catalog/tools/drills/bosch-gsh/');
// 2. Ждём загрузки кнопки и нажимаем
$addBtn = $this->waitForElement('[data-action="add-to-cart"]');
$addBtn->click();
// 3. Ждём обновления счётчика корзины
$counter = $this->waitForElement('.cart-counter');
$this->assertSame('1', $counter->getText());
// 4. Переходим в корзину
$this->driver->get($this->baseUrl . '/cart/');
// 5. Проверяем, что товар в корзине
$cartItem = $this->waitForElement('.cart-item');
$this->assertStringContainsString('Bosch GSH', $cartItem->getText());
// 6. Нажимаем оформить заказ
$this->driver->findElement(
WebDriverBy::cssSelector('.checkout-btn')
)->click();
// 7. Ждём страницы чекаута
$this->waitForElement('#checkout-form');
$this->assertStringContainsString('/order/', $this->driver->getCurrentURL());
}
}
Тест умного фильтра каталога
class CatalogFilterTest extends BitrixSeleniumTest
{
public function testFilterByBrandUpdatesListing(): void
{
$this->driver->get($this->baseUrl . '/catalog/tools/');
// Ждём загрузки фильтра
$this->waitForElement('.catalog-filter');
// Кликаем чекбокс фильтра «Bosch»
$brandCheckbox = $this->driver->findElement(
WebDriverBy::cssSelector('[data-filter="brand"][value="bosch"]')
);
$brandCheckbox->click();
// Ждём AJAX-обновления списка товаров
$this->driver->wait(10)->until(
WebDriverExpectedCondition::invisibilityOfElementLocated(
WebDriverBy::cssSelector('.catalog-loading')
)
);
// Проверяем, что URL изменился (ЧПУ-фильтр)
$this->assertStringContainsString('brand=bosch', $this->driver->getCurrentURL());
// Проверяем, что все карточки содержат «Bosch»
$cards = $this->driver->findElements(
WebDriverBy::cssSelector('.product-card .product-brand')
);
foreach ($cards as $card) {
$this->assertSame('Bosch', $card->getText());
}
}
}
Окупаемость Selenium-тестов для Битрикс
Автоматизация окупается, когда количество релизов превышает два в месяц. На проекте с каталогом на 50 000 товаров и частыми обновлениями фильтров Selenium-тесты снижают затраты на регрессию на 70% за счёт исключения ручных проверок. Экономия времени на одном релизе — от 4 до 8 человеко-часов. Если вы выкатываете изменения каждую неделю, тесты окупаются за два релиза. Экономия на одном релизе достигает 8 000 ₽ за счёт исключения ручного труда.
Сравнение: Selenium vs ручное тестирование
| Параметр | Ручное тестирование | Selenium-автоматизация |
|---|---|---|
| Скорость регрессии | 1–2 дня на весь каталог | 10–20 минут на набор тестов |
| Покрытие критических сценариев | Зависит от исполнителя | 100% определённых сценариев |
| Возможность интеграции в CI/CD | Нет | Да (GitLab CI, GitHub Actions) |
| Надёжность при частых релизах | Низкая из-за человеческого фактора | Высокая, тесты запускаются автоматически |
| Стоимость поддержки | Высокая при частых релизах | Снижается с ростом набора тестов |
Selenium лучше ручного тестирования минимум в 6 раз по скорости регрессии и полностью исключает человеческие ошибки при однотипных проверках.
Интеграция тестов в CI/CD: настройка
Мы настраиваем запуск набора тестов при каждом push или перед деплоем. Используем GitLab CI или GitHub Actions. Собираем Docker-образ с Selenium и тестами, запускаем параллельно. При падении тестов пайплайн останавливается — релиз не уходит с багами. Три ключевых теста покрывают 90% критических сценариев, а полный прогон из 50 тестов занимает около 10 минут.
Что входит в работу
- Настройка Selenium Grid в Docker (Chrome, headless-режим).
- Написание тестов для критических пользовательских сценариев (корзина, фильтр, авторизация, чекаут).
- Интеграция в CI/CD (GitLab CI, GitHub Actions, Bitbucket Pipelines).
- Подготовка документации: как запускать тесты локально, как добавлять новые.
- Обучение команды: проведём воркшоп по написанию тестов.
- Пост-релизная поддержка: исправление тестов после изменений дизайна или логики.
Процесс работы
- Аналитика — аудит текущего сайта, выявление критических сценариев.
- Проектирование — выбор инструментов (Selenium + PHP или Codeception), архитектура тестов.
- Реализация — написание тестов, настройка Grid, интеграция в CI/CD.
- Тестирование — прогон тестов на staging, отладка падений.
- Деплой — запуск в production pipeline, передача документации.
Сроки ориентировочно
| Задача | Сроки |
|---|---|
| Настройка Selenium Grid в Docker, базовая конфигурация | 4–8 часов |
| Тесты критических сценариев (корзина, фильтр, авторизация) | 1–2 дня |
| Интеграция в CI/CD pipeline | 4–8 часов |
Стоимость рассчитывается индивидуально после аудита. Оценим проект бесплатно — свяжитесь с нами, и мы подберём оптимальный набор тестов под ваш бюджет.
Чек-лист: типичные ошибки при настройке Selenium
- Игнорирование AJAX-ожиданий. Битрикс активно использует AJAX (умный фильтр, корзина). Без явных
waitForElementтесты падают на нестабильном наборе. - Тестирование на продакшне. Никогда не запускайте Selenium на живом сайте — это создаёт лишнюю нагрузку и может влиять на аналитику. Используйте тестовую копию.
- Жёстко зашитые локаторы. Если верстальщик поменял CSS-класс, тест сломается. Используйте data-атрибуты (
data-testid="cart-add") для стабильности. - Проверка только одного сценария. Покрывайте хотя бы 3–5 ключевых сценариев, иначе ценность автоматизации падает.
- Запуск без headless-режима. На сервере без GUI тесты не запустятся. Всегда настраивайте headless.
Получите консультацию по настройке Selenium-тестов для вашего проекта 1С-Битрикс. Наши инженеры с 10-летним опытом в Битрикс помогут наладить непрерывное тестирование и сократить риски релизов. Закажите аудит — оценим проект за один день.







