הגדרת בדיקות Cypress עבור 1C-Bitrix
פרויקט ה-Bitrix שלך גדל, ובדיקות רגרסיה ידניות אוכלות 30% מהתקציב. נתקלנו בזה פעמים רבות. המהנדסים שלנו מיישמים בדיקות Cypress לכיסוי E2E של נתיבים קריטיים — סינון, סל קניות, תשלום. התוצאה: ריצת ערכת בדיקות אורכת 10 דקות במקום 3 שעות של בדיקות ידניות. שגיאות נתפסות לפני העלייה לאוויר, ובדיקות לא יציבות כמעט נעלמות.
למה Cypress עדיף על Selenium עבור Bitrix
Cypress רץ בתוך הדפדפן, עם גישה מלאה ל-DOM ולרשת. בניגוד ל-Selenium, הוא ממתין אוטומטית לאלמנטים ולתגובות AJAX, כך שתנאי מרוץ עם sleep() מיותרים. בפועל, זה מניב פי 2-3 פחות בדיקות לא יציבות ומפחית את זמן הריצה ב-40% בממוצע. בנוסף, Cypress יכול לצלם צילומי מסך על כשלים ולהקליט וידאו — ניפוי באגים אורך דקות, לא שעות. כפי שמאושר בתיעוד הרשמי, ההמתנה האוטומטית של Cypress מפחיתה משמעותית בדיקות לא יציבות.
אילו בעיות אנחנו פותרים
בדיקות Selenium לא יציבות — באגים תכופים עקב בקשות AJAX איטיות של Bitrix (סינון, עדכוני סל). Cypress ממתין שכל בקשות הרשת יסתיימו לפני שהוא עובר לשלב הבא.
מורכבות CSRF וסשן — Bitrix משתמש ב-sessid להגנת CSRF. Cypress קולט אוטומטית עוגיות, ואנחנו מוסיפים פקודות מותאמות אישית לאימות נכון.
חוסר אינטגרציית CI — בדיקות רצות מקומית אבל לא בצנרת. אנחנו מגדירים ריצה ב-GitHub Actions / GitLab CI, עם בדיקות רגרסיה על כל push.
איך להגדיר Cypress לפרויקט Bitrix
ההתקנה וההגדרה הבסיסית אורכות 4–8 שעות. שלבים מרכזיים:
- התקנת המסגרת
npm install --save-dev cypress - יצירת קובץ תצורה
npm install --save-dev cypress:
import { defineConfig } from 'cypress';
export default defineConfig({
e2e: {
baseUrl: 'https://test.site.ru',
specPattern: 'cypress/e2e/**/*.cy.ts',
supportFile: 'cypress/support/e2e.ts',
viewportWidth: 1280,
viewportHeight: 900,
defaultCommandTimeout: 8000,
requestTimeout: 10000,
video: false,
screenshotOnRunFailure: true,
experimentalModifyObstructiveThirdPartyCode: true,
},
env: {
adminLogin: 'admin',
adminPassword: '', // из переменной окружения CYPRESS_adminPassword
siteSessid: '',
},
});
-
הוספת פקודות מותאמות אישית לעבודה עם Bitrix (אימות, הוספה לסל, קבלת sessid).
-
כתיבת בדיקות E2E, למשל, עבור מסנן הקטלוג החכם:
// cypress/e2e/catalog/filter.cy.ts
describe('Умный фильтр каталога', () => {
beforeEach(() => {
cy.visit('/catalog/tools/');
cy.get('.catalog-filter').should('be.visible');
cy.get('.product-list').should('be.visible');
});
it('фильтрует товары по бренду', () => {
cy.get('[data-filter-prop="BRAND"] [value="bosch"]').click();
cy.get('.catalog-loading').should('not.exist');
cy.url().should('include', 'brand=bosch');
cy.get('.product-brand').each($el => {
cy.wrap($el).should('have.text', 'Bosch');
});
});
it('сбрасывает фильтр', () => {
cy.get('[data-filter-prop="BRAND"] [value="bosch"]').click();
cy.get('.catalog-loading').should('not.exist');
cy.get('.filter-reset-btn').click();
cy.get('.catalog-loading').should('not.exist');
cy.url().should('not.include', 'brand=bosch');
});
it('отображает корректное количество товаров в счётчике фильтра', () => {
cy.get('[data-filter-prop="BRAND"] [value="makita"]').click();
cy.get('.catalog-loading').should('not.exist');
cy.get('.products-count').invoke('text').then(text => {
const count = parseInt(text.replace(/\D/g, ''));
cy.get('.product-card').should('have.length', Math.min(count, 24));
});
});
});
השוואה בין Cypress ל-Selenium עבור Bitrix
| פרמטר | Cypress | Selenium WebDriver |
|---|---|---|
| מהירות ריצה | פי 2 מהיר יותר (ללא עיכובי רשת בין שלבים) | איטי יותר עקב המתנות והתחלת/סיום דפדפן |
| יציבות בדיקות | כמעט ללא בדיקות לא יציבות (המתנה אוטומטית) | cypress.config.ts ו-import { defineConfig } from 'cypress'; export default defineConfig({ e2e: { baseUrl: 'https://test.site.ru', specPattern: 'cypress/e2e/**/*.cy.ts', supportFile: 'cypress/support/e2e.ts', viewportWidth: 1280, viewportHeight: 900, defaultCommandTimeout: 8000, requestTimeout: 10000, video: false, screenshotOnRunFailure: true, experimentalModifyObstructiveThirdPartyCode: true, }, env: { adminLogin: 'admin', adminPassword: '', // из переменной окружения CYPRESS_adminPassword siteSessid: '', }, }); תכופים |
| ניפוי באגים | מסע בזמן מובנה, וידאו, צילומי מסך | דורש פתרונות צד שלישי |
| טיפול ב-iframes וחלונות קופצים | מוגבל (לא מומלץ) | תמיכה מלאה |
| אינטגרציית CI | פשוטה, תמונות Docker מוכנות | דורש הגדרת Grid |
כדי לבודד בדיקות משירותים חיצוניים, השתמשו ב-// cypress/e2e/catalog/filter.cy.ts describe('Умный фильтр каталога', () => { beforeEach(() => { cy.visit('/catalog/tools/'); cy.get('.catalog-filter').should('be.visible'); cy.get('.product-list').should('be.visible'); }); it('фильтрует товары по бренду', () => { cy.get('[data-filter-prop="BRAND"] [value="bosch"]').click(); cy.get('.catalog-loading').should('not.exist'); cy.url().should('include', 'brand=bosch'); cy.get('.product-brand').each($el => { cy.wrap($el).should('have.text', 'Bosch'); }); }); it('сбрасывает фильтр', () => { cy.get('[data-filter-prop="BRAND"] [value="bosch"]').click(); cy.get('.catalog-loading').should('not.exist'); cy.get('.filter-reset-btn').click(); cy.get('.catalog-loading').should('not.exist'); cy.url().should('not.include', 'brand=bosch'); }); it('отображает корректное количество товаров в счётчике фильтра', () => { cy.get('[data-filter-prop="BRAND"] [value="makita"]').click(); cy.get('.catalog-loading').should('not.exist'); cy.get('.products-count').invoke('text').then(text => { const count = parseInt(text.replace(/\D/g, '')); cy.get('.product-card').should('have.length', Math.min(count, 24)); }); }); }); כדי לדמות בקשות AJAX. זה שימושי במיוחד בעת אינטגרציה עם 1C, שבה חילופי נתונים עשויים להיות לא יציבים. מקרה מעשי: בפרויקט אחד עם קטלוג של 10,000 מוצרים, דימינו תגובות מסנן, והפחתנו את זמן הריצה מ-45 ל-12 דקות.
איך מתבצע היישום
- ביקורת פונקציונליות קיימת — זיהוי תרחישים קריטיים (קטלוג, סל, תשלום, חשבון אישי).
- הגדרת תשתית — התקנת Cypress, התאמה לתבנית שלך, חיבור CI.
- כתיבת בדיקות — כיסוי 5–10 תרחישים מרכזיים בהתחלה, ואז הרחבה לרגרסיה מלאה.
- אינטגרציית CI/CD — הגדרה לריצה על כל pull request, שליחת דוחות ל-Slack/Telegram.
- הדרכת צוות — מפגש על כתיבה ותחזוקה של בדיקות.
מה כלול בעבודה
- הגדרת פרויקט Cypress עבור הסביבה שלך.
- ערכת פקודות מותאמות אישית (אימות, בחירת מטבע, קבלת sessid).
- ערכת בדיקות E2E לנתיבים קריטיים (מינימום 10 בדיקות).
- אינטגרציית CI (GitHub Actions / GitLab CI).
- תיעוד על ריצה ותחזוקה.
- חודש תמיכה: תיקון בדיקות לא יציבות ושינויים.
רשימת בדיקה למוכנות Cypress
- [ ] מאפייני נתונים מוגדרים בתבנית (
StaleElement). - [ ] סביבת בדיקות עם נתוני בדיקה (קטלוג, מחירים, משתמשים).
- [ ] שרת CI עם Docker ו-Node מוגדר.
- [ ] קריטריונים לתרחישים קריטיים סוכמו.
לוח זמנים
| משימה | משך |
|---|---|
| התקנת Cypress, תצורה בסיסית, פקודות מותאמות אישית | 4–8 שעות |
| בדיקות E2E לתרחישים קריטיים (5–10 בדיקות) | 1–2 ימים |
| ערכת בדיקות מלאה לקטלוג + סל + תשלום | 2–4 ימים |
| אינטגרציה ל-GitHub Actions / GitLab CI | 4–8 שעות |
למהנדסים שלנו יש מעל 10 שנות ניסיון עם Bitrix והסמכות 1C-Bitrix. אנחנו מבטיחים יציבות בדיקות ודיווח שקוף. צרו קשר לייעוץ והערכת פרויקט. הזמינו יישום בדיקות — הפחיתו עלויות רגרסיה פי 2-3. קבלו ייעוץ לפרויקט שלכם — נעריך את המורכבות ונציע ערכת בדיקות אופטימלית.

