Налаштування E2E-тестування для 1С-Бітрікс

Чому E2E-тестування критичне для Бітрікс-проєктів? Після кожного оновлення модуля, шаблону або API-інтеграції хтось вручну перевіряє кошик, оформлення замовлення та особистий кабінет. Процес займає 2–3 години, але все одно пропускає регресії: жоден тестувальник за один прогін не охопить п'ять бра
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування E2E-тестування для 1С-Бітрікс
Простий
~1 день

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1018
  • 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
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    803
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1162

Чому E2E-тестування критичне для Бітрікс-проєктів?

Після кожного оновлення модуля, шаблону або API-інтеграції хтось вручну перевіряє кошик, оформлення замовлення та особистий кабінет. Процес займає 2–3 години, але все одно пропускає регресії: жоден тестувальник за один прогін не охопить п'ять браузерів, мобільні в'юпорти та авторизацію через соцмережі. У нас за плечима понад 50 проєктів на Бітрікс — приблизно в третині випадків реліз затримувався саме через пропущену регресію, виявлену в останній момент. E2E-тести вирішують цю проблему автоматично: вони проганяються за 15–20 хвилин, стабільно знаходять ті самі кейси, які людина пропускає.

Як ми це робимо?

Налаштовуємо тестове середовище, обираємо інструмент, пишемо Page Object Model для ключових компонентів та інтегруємо прогін у ваш CI/CD. Працюємо під ключ — від аудиту поточної архітектури до передачі документації та навчання команди.

Playwright vs Cypress: що обрати для Бітрікс?

Критерій Playwright Cypress
Підтримка браузерів Chromium, Firefox, WebKit Тільки Chromium та похідні
Мобільні в'юпорти Емуляція пристроїв (iPhone, Pixel та ін.) Обмежена емуляція
Робота з кількома вкладками Нативно Не підтримується
Мережеве перехоплення Є (route, waitForResponse) Є, але складніше
Інтеграція з CI/CD Проста, вбудований репортер Вимагає додаткових плагінів
Швидкість виконання Висока (паралельний запуск) Середня

Playwright — оптимальний вибір для Бітрікс-проєктів. Він підтримує всі браузери в одному запуску, працює headless та headful, має потужний локатор API, який не ламається при зміні DOM. Вбудована емуляція мобільних пристроїв та мережеве перехоплення — те, що потрібно для тестування sale.order.ajax з його асинхронністю.

Cypress хороший для SPA, але для багатосторінкових Бітрікс-сайтів його обмеження (один origin, відсутність нативної роботи з кількома вкладками) створюють проблеми. У наших проєктах ми використовуємо Playwright у 9 випадках з 10.

Інфраструктура тестового середовища

Тестове середовище — обов'язково окрема база даних з фіксованими даними. Жодних тестів на продакшені. Ми розгортаємо копію сайту з відомими характеристиками: каталог з 50–100 товарів, кілька типів платників, налаштовані способи доставки та оплати. Мінімальна структура репозиторію:

tests/ e2e/ fixtures/ # JSON з тестовими даними pages/ # Page Object Model specs/ # сценарії playwright.config.ts 
// playwright.config.ts import { defineConfig, devices } from '@playwright/test'; export default defineConfig({ testDir: './tests/e2e/specs', timeout: 30_000, retries: process.env.CI ? 2 : 0, use: { baseURL: process.env.TEST_BASE_URL || 'https://test.shop.example.com', trace: 'on-first-retry', screenshot: 'only-on-failure', }, projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] } }, { name: 'mobile', use: { ...devices['iPhone 13'] } }, ], }); 

Page Object Model для Бітрікс

Стандартні компоненти bitrix:sale.order.ajax, bitrix:sale.basket.basket та bitrix:system.auth.form мають стійкі CSS-класи. Page Object ізолює локатори від тестів — якщо в новій версії шаблону змінюється верстка, правимо один файл, а не всі сценарії.

// tests/e2e/pages/CartPage.ts import { Page, Locator } from '@playwright/test'; export class CartPage { readonly page: Page; readonly checkoutButton: Locator; readonly totalPrice: Locator; constructor(page: Page) { this.page = page; this.checkoutButton = page.locator('.basket-checkout-btn'); this.totalPrice = page.locator('.basket-coupon-block-total-price-current'); } async goto() { await this.page.goto('/personal/cart/'); } async applyPromocode(code: string) { await this.page.fill('.basket-coupon-field-input', code); await this.page.click('.basket-coupon-apply-btn'); await this.page.waitForResponse(resp => resp.url().includes('ajax_basket') && resp.status() === 200 ); } } 

Ключові сценарії

Додавання до кошика та оформлення замовлення:

// tests/e2e/specs/checkout.spec.ts import { test, expect } from '@playwright/test'; import { CartPage } from '../pages/CartPage'; test('checkout flow', async ({ page }) => { // Додаємо товар зі сторінки каталогу await page.goto('/catalog/electronics/headphones/sennheiser-hd-599/'); await page.click('.catalog-element-offer-set-item:first-child'); // вибір SKU await page.click('.btn-buy'); await expect(page.locator('.bx-basket-count')).toContainText('1'); // Перехід до кошика const cart = new CartPage(page); await cart.goto(); await expect(cart.totalPrice).toBeVisible(); // Оформлення await cart.checkoutButton.click(); await page.fill('#order-name', 'Іван Іванов'); await page.fill('#order-email', '[email protected]'); await page.fill('#order-phone', '+380123456789'); await page.click('#pay-system-1'); // вибір способу оплати await Promise.all([ page.waitForURL(/\/order\/success\//), page.click('.btn-checkout-submit'), ]); await expect(page.locator('.sale-order-detail-result')).toBeVisible(); }); 

Авторизація та особистий кабінет:

test('login and account access', async ({ page }) => { await page.goto('/personal/login/'); await page.fill('#USER_LOGIN', '[email protected]'); await page.fill('#USER_PASSWORD', 'testpassword123'); await page.click('.login-btn'); await expect(page).toHaveURL(/\/personal\//); await expect(page.locator('.personal-user-name')).toContainText('Іван'); }); 

Інтеграція в CI/CD

Налаштовуємо прогін тестів при кожному пуші в main/staging. У разі падіння артефакти (скріншоти, трейси) зберігаються для аналізу. Приклад конфігу GitHub Actions:

# .github/workflows/e2e.yml name: E2E Tests on: push: branches: [main, staging] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npm ci - run: npx playwright install --with-deps chromium - run: npx playwright test env: TEST_BASE_URL: ${{ secrets.TEST_BASE_URL }} - uses: actions/upload-artifact@v4 if: failure() with: name: playwright-report path: playwright-report/ 

Що входить у налаштування E2E (що ми віддаємо)

  • Аудит поточної архітектури: які компоненти використовуються, як реалізована асинхронність, які сценарії критичні.
  • Проєктування тестового покриття: узгодження списку сценаріїв з вашою командою.
  • Написання Page Object Model для 5–10 ключових компонентів.
  • Реалізація 15–30 тестових сценаріїв (кошик, checkout, авторизація, фільтрація, промокоди, особистий кабінет).
  • Налаштування CI/CD прогону (GitHub Actions / GitLab CI / Jenkins).
  • Документація з запуску та підтримки тестів.
  • Навчання команди: 2–3 годинний воркшоп з додавання нових сценаріїв.

Які сценарії покривати в першу чергу?

Сценарій Пріоритет Компоненти Бітрікс
Додавання до кошика + checkout Критичний sale.basket.basket, sale.order.ajax
Авторизація / реєстрація Критичний system.auth.form
Пошук + фільтрація каталогу Високий search.title, catalog.smart.filter
Застосування промокоду Високий sale.basket.basket.coupon
Особистий кабінет (історія замовлень) Середній sale.personal.order.list

Стабільність тестів — головне завдання. Ми використовуємо waitForResponse замість waitForTimeout, локатори по data-testid там, де стандартні CSS-класи змінюються при оновленнях шаблону. При нестабільних тестах проблема майже завжди в асинхронності Бітрікс AJAX, а не в Playwright.

Наш досвід та гарантії

Ми — сертифіковані партнери 1С-Бітрікс з досвідом понад 5 років. За цей час реалізували E2E-тестування для 20+ проєктів різної складності — від невеликих інтернет-магазинів до корпоративних порталів на Бітрікс24. Гарантуємо стабільність тестів: після передачі вони не падають на порожніх змінах. Якщо виникають питання — безкоштовно консультуємо протягом місяця після здачі.

Як замовити налаштування?

Оцінимо ваш проєкт за 1–2 робочих дні. Для цього потрібен доступ до репозиторію та тестового середовища. Зв'яжіться з нами — розкажемо, які сценарії покриємо в першу чергу і скільки це займе часу за строками.