Настройка Selenium-тестов для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка Selenium-тестов для 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка Selenium-тестов для 1С-Битрикс

Ручное тестирование регрессий после каждого релиза — дорого. Форма заказа сломалась, фильтр каталога не работает на третьей странице, корзина теряет товары после авторизации — эти сценарии можно поймать Selenium до того, как их поймет покупатель. Для Битрикс-сайтов, где бизнес-логика расползается по PHP-компонентам и JavaScript, Selenium — наиболее подходящий инструмент: он тестирует реальный браузер, а не моки.

Настройка Selenium-тестов для 1С-Битрикс

Инфраструктура 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 Grid в Docker, базовая конфигурация 4–8 часов
Тесты критических сценариев (корзина, фильтр, авторизация) 1–2 дня
Интеграция в CI/CD pipeline 4–8 часов