Налаштування Selenium-тестів для 1С-Бітрікс під ключ

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування Selenium-тестів для 1С-Бітрікс під ключ
Простий
~1 день
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1074

Після оновлення торгового каталогу на сайті 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).
  • Підготовка документації: як запускати тести локально, як додавати нові.
  • Навчання команди: проведемо воркшоп із написання тестів.
  • Пост-релізна підтримка: виправлення тестів після змін дизайну або логіки.

Процес роботи

  1. Аналітика — аудит поточного сайту, виявлення критичних сценаріїв.
  2. Проєктування — вибір інструментів (Selenium + PHP або Codeception), архітектура тестів.
  3. Реалізація — написання тестів, налаштування Grid, інтеграція в CI/CD.
  4. Тестування — прогін тестів на staging, налагодження падінь.
  5. Деплой — запуск у 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-річним досвідом у Бітрікс допоможуть налагодити безперервне тестування та скоротити ризики релізів. Замовте аудит — оцінимо проєкт за один день.

Тестування сайтів на 1С-Бітрікс

CIBlockElement::GetList і пагінація — баг, який живе роками

Класичний кейс: на сайті каталог із пагінацією через компонент bitrix:catalog.section. Замовник скаржиться — на третій сторінці дублюються товари. Лізеш у кеш компонента, чистиш — начебто ок. Через день знову. Виявляється, кастомне сортування конфліктує з параметром PAGEN_1, і при певній комбінації фільтрів CIBlockElement::GetList повертає ті самі ID. Такі штуки ловляться тільки тестуванням — не код-рев'ю, не «подивився очима».

Зламана пагінація, некоректний розрахунок знижок, помилки інтеграції з 1С — кожен з цих багів коштує бізнесу реальних грошей. Ми знаємо, як їх знайти і виправити до того, як вони вплинуть на продажі. Наша команда має понад 10 років досвіду з Бітрікс і понад 50 успішних QA-проєктів. Ми вибудовуємо QA-процес під проєкти на 1С-Бітрікс: ручне функціональне, автоматизовані E2E, навантажувальне та приймальне тестування.

Чому сайти на 1С-Бітрікс потребують професійного тестування?

Проєкти на 1С-Бітрікс — не лендінги. Під капотом — десятки модулів, інтеграції та неочевидні залежності:

  • Ланцюжки в бізнес-логіці — виправив розрахунок знижок у sale.discount, а промокод через sale.basket.discount перестав застосовуватися. Модуль знижок у Бітріксі — один із найкрихкіших: правила пріоритетів, перетини, накопичувальні програми. Одна правка — каскад збоїв.
  • Інтеграція з 1С — обмін через catalog.import.1c або REST. Збій у маппінгу властивостей інфоблоку — і на сайті товар без ціни або з нульовим залишком. Розсинхронізація замовлень — втрачені продажі.
  • Оновлення ядра — bitrix:main оновився, а кастомний компонент використовував deprecated-метод CModule::IncludeModule з нестандартними параметрами. Без регресії — російська рулетка.
  • Мультибраузерність — bitrix:sale.order.ajax рендерить форми по-різному в Safari і Chrome. Кнопка «Оформити замовлення» на iPhone може з'їхати за межі екрана.

Як функціональне тестування вирішує типові проблеми?

Перевіряємо кожен бізнес-сценарій. Не «працює-не працює», а всі граничні випадки.

Каталог (компоненти catalog.section, catalog.element)

  • Розумний фільтр catalog.smart.filter: усі комбінації властивостей, скидання, підрахунок результатів. Особливо — фільтри за торговими пропозиціями (SKU), вони ламаються найчастіше.
  • Сортування + пагінація — той самий баг із дублями.
  • Порівняння через catalog.compare.list — додавання, видалення, відображення відмінностей.
  • Швидкий перегляд — модальне вікно, кошик із модалки.

Кошик і замовлення (sale.basket.basket, sale.order.ajax)

  • Додавання з каталогу, з картки, швидке замовлення.
  • Знижки: за кількістю, за сумою, за купоном, за накопичувальною. Перетин знижок — окремий тест-кейс, мінімум 8 комбінацій.
  • Розрахунок доставки: обробники sale.delivery.services, вартість, терміни, ПВЗ на карті.
  • Оплата: sale.paysystem — проходження платежу, обробка відхилень, повернення.
  • Формування замовлення: email через main.mail.event, запис у CRM, передача в 1С через sale.export.1c.

Особистий кабінет (sale.personal.section)

  • Реєстрація, авторизація, відновлення пароля — включно з edge-case із кириличним email.
  • Історія замовлень, повторне замовлення.
  • Підписки, бонусна програма.

Форми та пошук

  • form.result.new / iblock.element.add.form — відправка, валідація, файлові поля.
  • search.page — релевантність, морфологія, обробка помилок через search.title.

Регресійне тестування: як ми запобігаємо помилкам після оновлень

Після кожного деплою ми перевіряємо, чи не зламали те, що працювало.

  • Smoke-тести — головна відкривається, каталог віддає товари, замовлення проходить до кінця. 5 хвилин, запускаємо після кожного деплою. Якщо smoke впав — відкочуємо, не розбираючись.
  • Регресійний набір — 40–80 тест-кейсів за основними сценаріями. Перед кожним релізом.
  • Візуальне тестування — порівняння скріншотів через Percy або Playwright. Кнопка з'їхала на 20px, шрифт змінився після оновлення — тест покаже diff.
  • Чек-листи за модулями — структуровані списки для sale, catalog, iblock, search. Кожен модуль — свій чек-лист.
Типовий набір регресійних тест-кейсів (скорочено) - Головна сторінка: коректне відображення слайдера, категорій, блоку акцій. - Каталог: фільтр без результатів, фільтр із однією властивістю, пагінація після зміни сортування. - Картка товару: зміна кількості, різні торгові пропозиції, додавання в обране. - Кошик: зміна кількості, видалення, застосування купона. - Оформлення: успішна оплата, помилка оплати, повернення з помилкою.

Як визначити вузькі місця продуктивності магазину на Бітрікс?

Ми моделюємо навантаження, щоб зрозуміти, при якому RPS catalog.section почне віддавати 500-ку. Використовуємо реалістичні профілі на основі вашої аналітики.

Профіль навантаження для магазину на Бітрікс:

Сценарій Частка Цільовий відгук Що ламається першим
Головна 20% < 1 сек Композитний кеш, якщо не налаштований
Каталог із фільтрами 30% < 2 сек MySQL — важкі JOIN по b_iblock_element_property
Картка товару 25% < 1.5 сек Запити до торгових пропозицій
Додавання в кошик 10% < 1 сек Блокування таблиці b_sale_basket
Оформлення замовлення 5% < 3 сек Обробники доставки (зовнішні API)
Пошук 10% < 2 сек b_search_content без індексів

Інструменти: k6 (JavaScript-сценарії для кошика та чекауту), Apache JMeter (складні сценарії з cookie-авторизацією), Yandex.Tank (візуалізація в реальному часі). На виході — максимальний RPS, час відгуку за перцентилями p50/p95/p99, вузькі місця (CPU, RAM, MySQL slow queries на b_iblock_element, файловий кеш). Конкретні рекомендації: який індекс додати, який запит переписати на D7 ORM, де ввімкнути композитний кеш.

У проєкті з 100 000 товарами додавання індекса на b_iblock_element_property.IBLOCK_ELEMENT_ID скоротило час виконання фільтра з 8 секунд до 0.3 секунди — ми знайшли це саме під час навантажувального тестування.

Автоматизоване, кросбраузерне та приймальне тестування

Кросбраузерність перевіряємо там, де реально сидять покупці. Статистика з Метрики конкретного проєкту важливіша за загальноринкові дані. Мінімальний набір: Chrome (останні 2 версії), Safari на iOS, Яндекс.Браузер, Samsung Internet. Пристрої: Desktop 1920×1080 та 1366×768, iPhone 375×812 та 390×844 (обов'язково чекаут), Android 360×800 та 412×915. Інструменти: BrowserStack для реальних пристроїв, Playwright для автоматизації в Chromium/Firefox/WebKit.

Автоматизація базується на Playwright — кросбраузерність, паралельний запуск, автоматичні очікування, добре працює з динамічними формами sale.order.ajax. У порівнянні з ручним тестуванням, автоматизація скорочує час виконання регресії втричі. PHPUnit використовуємо для модульних тестів кастомних компонентів і бізнес-логіки — інтеграція з CI/CD (GitLab CI, GitHub Actions). Тестовий набір із 50 сценаріїв виконується за 15 хвилин замість годин ручної перевірки.

Фінальна перевірка (UAT) проводиться із замовником на staging з копією продової бази. Спільно складаємо 15–20 ключових шляхів покупця, фіксуємо баги в Jira/YouTrack, оформляємо протокол приймання.

QA-процес: як ми вбудовуємо тестування в розробку

Тестування не приклеюється наприкінці — воно стартує з аналізу вимог.

  1. Аналіз вимог — QA бере участь в обговоренні завдань, ловить неоднозначності. «Знижка застосовується до товару чи до замовлення?» — таке питання на старті економить два дні відладки.
  2. Тест-кейси до розробки — сценарії готові до першого рядка коду.
  3. Code review — перевірка на типові помилки Бітрікса: неочищений кеш компонентів, прямі SQL-запити замість ORM, відсутність перевірки $USER->IsAuthorized().
  4. Функціональне → регресійне → деплой.
  5. Моніторинг після релізу — помилки в bitrix/error.log, метрики в аналітиці, алерти по 500-м.

Закажіть тестування сьогодні — і ми підготуємо тест-план за 2 дні.

Терміни та вартість тестування

Завдання Терміни
Тест-план 2–3 дні
Функціональне тестування (середній магазин) 3–5 днів
Базовий набір E2E-автотестів (Playwright) 2–3 тижні
Навантажувальне тестування + звіт 1–2 тижні
Кросбраузерне 2–3 дні
UAT-супровід 3–5 днів
QA-процес з нуля 3–4 тижні

Що входить у роботу: детальний тест-план із чек-листами за модулями, автоматизований набір E2E-тестів (Playwright/Cypress) під ваш стек, звіт із результатами, скріншотами помилок і рекомендаціями, інтеграція тестів у ваш CI/CD (GitLab CI, GitHub Actions, Bitbucket Pipelines), супровід UAT — до трьох ітерацій виправлень без додаткової оплати, документація процесу тестування для вашої команди.

Баг на продакшені — це не тільки вартість виправлення. Середнє виправлення критичного дефекту коштує від 20 000 грн, а втрати від зламаного кошика за вихідні на проєкті з оборотом 5 млн/міс можуть сягати 400 000 грн. Інвестиція в тестування — це страховка вашого бізнесу.

Зв'яжіться з нами, щоб отримати комерційну пропозицію та детальний план тестування для вашого проєкту.