Після оновлення торгового каталогу на сайті 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-річним досвідом у Бітрікс допоможуть налагодити безперервне тестування та скоротити ризики релізів. Замовте аудит — оцінимо проєкт за один день.







