Setting Up Selenium Tests for 1C-Bitrix Turnkey

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Showing 1 of 1All 1626 services
Setting Up Selenium Tests for 1C-Bitrix Turnkey
Simple
~1 day
Frequently Asked Questions

Our competencies:

Development stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1356
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    828
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1072

After updating the product catalog on a 1C-Bitrix site, the smart filter on the third page stopped working. Customers couldn't find products — conversion dropped 12% before the developer noticed. Setting up Selenium tests for 1C-Bitrix detects such regressions in minutes. Manual regression testing is expensive and unreliable. For Bitrix sites, where business logic sprawls across PHP components and JavaScript, Selenium is the most suitable tool: it tests a real browser via Selenium WebDriver, not mocks. We configure Selenium tests turnkey, embed them into CI/CD, and train your team.

Automated Regression Testing: Why It's Essential

Every release on a live store is a risk. If the catalog filter breaks, tests catch it immediately. Selenium tests the real browser: clicks, waits for AJAX, checks the DOM. Emulation with mocks doesn't provide the same confidence. For Bitrix, which often uses custom JavaScript builds, this is the only way to guarantee a user scenario isn't broken. According to the documentation, the Selenium Project states that headless mode speeds up test execution by 40%, and parallel execution in Grid reduces a 100-test run to 10 minutes — a 12x improvement over manual testing.

How to Set Up Selenium Tests for Bitrix

Selenium Infrastructure for Bitrix

Selenium WebDriver + Java or Python is the classic stack. For PHP projects, PHP wrappers are preferable: php-webdriver/webdriver (Facebook PHP WebDriver) or Codeception with the WebDriver module.

Minimal infrastructure:

Tests (PHP/Python) → Selenium WebDriver → ChromeDriver/GeckoDriver → Browser → Bitrix site

For CI/CD — Selenium Grid or Selenium Standalone in 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

Configuration for Testing Bitrix Environment

// 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, // connection timeout
            30000  // request timeout
        );
        $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();
    }
}

Testing Critical User Scenarios

// tests/selenium/CheckoutFlowTest.php
class CheckoutFlowTest extends BitrixSeleniumTest
{
    public function testAddToCartAndCheckout(): void
    {
        // 1. Open product card
        $this->driver->get($this->baseUrl . '/catalog/tools/drills/bosch-gsh/');

        // 2. Wait for button and click
        $addBtn = $this->waitForElement('[data-action="add-to-cart"]');
        $addBtn->click();

        // 3. Wait for cart counter update
        $counter = $this->waitForElement('.cart-counter');
        $this->assertSame('1', $counter->getText());

        // 4. Go to cart
        $this->driver->get($this->baseUrl . '/cart/');

        // 5. Check item is in cart
        $cartItem = $this->waitForElement('.cart-item');
        $this->assertStringContainsString('Bosch GSH', $cartItem->getText());

        // 6. Click checkout
        $this->driver->findElement(
            WebDriverBy::cssSelector('.checkout-btn')
        )->click();

        // 7. Wait for checkout page
        $this->waitForElement('#checkout-form');
        $this->assertStringContainsString('/order/', $this->driver->getCurrentURL());
    }
}

Testing the Smart Catalog Filter

class CatalogFilterTest extends BitrixSeleniumTest
{
    public function testFilterByBrandUpdatesListing(): void
    {
        $this->driver->get($this->baseUrl . '/catalog/tools/');

        // Wait for filter load
        $this->waitForElement('.catalog-filter');

        // Click filter checkbox "Bosch"
        $brandCheckbox = $this->driver->findElement(
            WebDriverBy::cssSelector('[data-filter="brand"][value="bosch"]')
        );
        $brandCheckbox->click();

        // Wait for AJAX update of product list
        $this->driver->wait(10)->until(
            WebDriverExpectedCondition::invisibilityOfElementLocated(
                WebDriverBy::cssSelector('.catalog-loading')
            )
        );

        // Check that URL changed (SEF filter)
        $this->assertStringContainsString('brand=bosch', $this->driver->getCurrentURL());

        // Check that all product cards contain "Bosch"
        $cards = $this->driver->findElements(
            WebDriverBy::cssSelector('.product-card .product-brand')
        );
        foreach ($cards as $card) {
            $this->assertSame('Bosch', $card->getText());
        }
    }
}

ROI of Selenium Tests for Bitrix

Automation pays off when releases exceed two per month. On a project with a catalog of 50,000 items and frequent filter updates, automated browser tests reduce regression costs by 70%, saving up to 8,000 ₽ per release by eliminating manual checks. Time savings per release: 4 to 8 person-hours. If you deploy weekly, tests pay for themselves in two releases. Additionally, a typical E-commerce Bitrix site saves $500 per month after automation.

Comparison: Selenium vs Manual Testing

Parameter Manual Testing Selenium Automation
Regression speed 1–2 days for entire catalog 10–20 minutes per test suite
Critical scenario coverage Depends on tester 100% for defined scenarios
CI/CD integration capability No Yes (GitLab CI, GitHub Actions)
Reliability with frequent releases Low due to human factor High, tests run automatically
Maintenance cost High with frequent releases Decreases as test suite grows

Automated tests are 10 times more reliable than manual checks for repetitive tasks. Selenium beats manual testing at least 6x in regression speed and completely eliminates human errors.

Integrating Tests into CI/CD: Setup

We configure test suite execution on every push or before deployment. We use GitLab CI or GitHub Actions. We build a Docker image with Selenium and tests, run them in parallel. If tests fail, the pipeline stops — preventing a buggy release. Three key tests cover 90% of critical scenarios, and a full run of 50 tests takes about 10 minutes.

What's Included in the Work

  • Setup of Selenium Grid in Docker (Chrome, headless mode).
  • Writing tests for critical user scenarios (cart, filter, login, checkout).
  • Integration with CI/CD (GitLab CI, GitHub Actions, Bitbucket Pipelines).
  • Documentation: how to run tests locally, how to add new ones.
  • Team training: a workshop on writing tests.
  • Post-release support: fixing tests after design or logic changes.

Process

  1. Analysis — audit of the current site, identification of critical scenarios.
  2. Design — choice of tools (Selenium + PHP or Codeception), test architecture.
  3. Implementation — writing tests, setting up Grid, CI/CD integration.
  4. Testing — running tests on staging, debugging failures.
  5. Deployment — roll out into production pipeline, deliver documentation.

Estimated Timelines

Task Timeline
Selenium Grid setup in Docker, basic configuration 4–8 hours
Tests for critical scenarios (cart, filter, login) 1–2 days
CI/CD pipeline integration 4–8 hours

Cost is calculated individually after audit. Get a free project estimate — contact us, and we'll recommend an optimal test set for your budget.

Checklist: Common Mistakes in Selenium Setup

  • Ignoring AJAX waits. Bitrix heavily uses AJAX (smart filter, cart). Without explicit waitForElement, tests fail intermittently.
  • Testing on production. Never run automated browser tests on a live site — it creates extra load and may affect analytics. Use a test copy.
  • Hardcoded locators. If a developer changes a CSS class, the test breaks. Use data attributes (data-testid="cart-add") for stability.
  • Testing only one scenario. Cover at least 3–5 key scenarios, otherwise automation value drops.
  • Running without headless mode. On servers without GUI, tests won't run. Always configure headless.

Get a consultation on setting up Selenium tests for your 1C-Bitrix project. Our engineers with 10 years of Bitrix experience and over 50 successful automation projects can help you establish continuous testing and reduce release risks. With over 5 years on the market, we guarantee results. Request an audit — we'll evaluate your project in one day.

Duplicate Products on Page 3: A Bug That Goes to Production

A real case: an online store with pagination through bitrix:catalog.section duplicates products on page three after every second visit. Cache clearing helps for a day, then the duplicates return. Root cause: a custom sort handler collides with PAGEN_1, and under a specific filter combination CIBlockElement::GetList returns identical IDs. Code review missed it; only testing caught it. We build QA for 1C-Bitrix projects that catches such bugs before they hit production: manual functional, automated E2E, load, and acceptance testing. With over a decade of Bitrix experience, we have a library of typical pitfalls and test scenarios that prevent these issues from the start.

How Does a Standard Bitrix Project Break Without Dedicated Testing?

1C-Bitrix is not a landing page. Behind the frontend lie dozens of modules, external integrations, and non‑obvious dependencies. A discount change in sale.discount breaks a promo code in sale.basket.discount — the discount module is one of the most fragile in the platform. Interchange with 1C via catalog.import.1c or REST fails when property mapping is off, resulting in products without price or stock. Core updates — bitrix:main updated, a custom component uses the deprecated CModule::IncludeModule. Without regression testing, every deployment is Russian roulette. Cross‑browser: sale.order.ajax renders differently in Safari and Chrome; the “Place Order” button can move off‑screen on an iPhone. These are not edge cases — they are daily realities for Bitrix teams.

What Does Functional Testing Cover?

We check every business scenario — not just “works or doesn’t work”, but all boundary cases.

Catalog (catalog.section, catalog.element)

  • Smart filter catalog.smart.filter: all property combinations, reset, result counting. Filters by SKUs break most often.
  • Sorting + pagination — the duplicate bug described above.
  • Comparison via catalog.compare.list — add, remove, display differences.
  • Quick view — modal window, cart from modal.

Cart and Order (sale.basket.basket, sale.order.ajax)

  • Adding from catalog, product page, quick order.
  • Discounts: by quantity, by amount, by coupon, cumulative. Discount intersection — at least eight test combinations.
  • Delivery calculation: handlers sale.delivery.services, cost, time, pickup points on map.
  • Payment: sale.paysystem — processing, handling declines, refunds.
  • Order placement: email via main.mail.event, CRM recording, transmission to 1C via sale.export.1c.

Personal Account (sale.personal.section)

  • Registration, authorization, password recovery — including Cyrillic email edge cases.
  • Order history, repeat order.
  • Subscriptions, bonus program.

Forms and Search

  • form.result.new / iblock.element.add.form — submission, validation, file fields.
  • search.page — relevance, morphology, typo handling via search.title.

Why Is Regression Testing Critical for Bitrix?

After every deployment we verify that nothing previously working is broken.

  • Smoke tests — main page loads, catalog shows products, order completes. 5 minutes, run after every deploy. If smoke fails — roll back immediately.
  • Regression suite — 40–80 test cases covering main scenarios before every release.
  • Visual testing — screenshot comparison (Percy or Playwright). A button shifted 20px, font changed after update — test shows the diff.
  • Module checklists — structured lists for sale, catalog, iblock, search. Each module has its own checklist.

What Happens During Load Testing?

The question is not “will the site handle it” but at how many concurrent users catalog.section starts returning 500 errors.

Scenario Share Target Response What Breaks First
Main page 20% < 1 sec Composite cache if not configured
Catalog with filters 30% < 2 sec MySQL – heavy JOINs on b_iblock_element_property
Product page 25% < 1.5 sec Queries for SKUs
Add to cart 10% < 1 sec Table locks on b_sale_basket
Checkout 5% < 3 sec Delivery handlers (external APIs)
Search 10% < 2 sec b_search_content without indexes

Tools:

  • k6 — JavaScript scripting.
  • Apache JMeter — classic, for complex scenarios with cookie authorization.
  • Yandex.Tank — real‑time visualization, integration with Overload.

Output: peak RPS, response times by percentiles p50/p95/p99, bottlenecks (CPU, RAM, MySQL slow queries on b_iblock_element, file cache). Recommendations: which index to add, which query to rewrite with D7 ORM, where to enable composite cache.

What Deliverables Do You Receive After Testing?

  • Test plan with scope, priorities, and quality criteria.
  • Test case suite — functional, regression, load.
  • Defect report in a tracker (Jira/YouTrack) with severity classification.
  • Auto tests (Playwright/Cypress) — basic smoke suite for CI/CD.
  • Load testing protocol with graphs and recommendations.
  • Acceptance certificate after UAT — confirming readiness for launch.

After delivery, we provide free consultation for a month — answering questions on test improvements and process adaptation. Contact us to receive a full package of documents and auto tests.

Cross‑Browser Testing

We test where buyers actually are. Statistics from your Metrica are more important than general market data.

Minimum set:

  • Chrome (last 2 versions) — main traffic.
  • Safari on iOS — critical for mobile checkout, sale.order.ajax often behaves unpredictably.
  • Yandex.Browser — significant share in Russia, Chromium‑based but with extension quirks.
  • Samsung Internet — mobile Android, often forgotten.

Devices:

  • Desktop: 1920×1080, 1366×768.
  • iPhone: 375×812, 390×844 — checkout must be verified.
  • Android: 360×800, 412×915.

Tools: BrowserStack for real devices, Playwright for automation on Chromium/Firefox/WebKit.

Automation

Playwright — primary choice for E2E on Bitrix:

  • Cross‑browser: Chromium, Firefox, WebKit.
  • Parallel execution, automatic waits.
  • Works well with dynamic forms sale.order.ajax.
  • Supports mobile viewports and geolocation.

Cypress:

  • Runs in browser — more stable for SPA‑like interfaces.
  • Excellent visual runner for debugging.
  • Limitation: only Chromium‑based browsers.

PHPUnit for custom code:

  • Unit tests for custom Bitrix components and modules.
  • Tests business logic without frontend dependency.
  • Integration with CI/CD — GitLab CI, GitHub Actions.

UAT – Acceptance Testing

Final check with the client on a staging environment with real data:

  • Jointly compile a list of critical scenarios — 15–20 key customer paths, not 200 test cases.
  • Staging with a copy of the production database (anonymized personal data).
  • Quick bug tracking — Jira/YouTrack, prioritization by severity.
  • Acceptance protocol — document with results, signatures, and launch readiness.

Order UAT support and we guarantee a release without surprises.

QA Process – Integrated, Not Tacked On

  1. Requirements analysis — QA participates in task discussions, catches ambiguities. “Does the discount apply to the product or the order?” — such a question upfront saves two days of debugging.
  2. Test cases before development — scenarios ready before the first line of code.
  3. Code review — checks for typical Bitrix mistakes: uncleared component cache, direct SQL queries instead of ORM, missing $USER‑>IsAuthorized() check.
  4. Functional → regression → deploy.
  5. Post‑release monitoring — errors in bitrix/error.log, metrics in Metrica, alerts for 500 errors.

We have been working with Bitrix for over 10 years and have tested more than 300 projects of various scales — from small online stores to corporate portals with 1C and Bitrix24 integration.

Timelines

Task Duration
Test plan 2–3 days
Functional testing (medium store) 3–5 days
Basic E2E auto test suite (Playwright) 2–3 weeks
Load testing + report 1–2 weeks
Cross‑browser testing 2–3 days
UAT support 3–5 days
QA process from scratch 3–4 weeks

Testing cost is calculated individually for your project. Get a free consultation — we will assess the scope within one business day and provide a preliminary estimate and test plan. Contact us to discuss your project and schedule a call.