Axe-core: אוטומציה של בדיקות WCAG 2.1 עם Jest ו-Playwright

הפרות נגישות מתגלות לעתים קרובות מאוחר מדי—במהלך בדיקות ידניות או כבר בסביבת הייצור, מה שמהווה סיכונים מוניטריים ומשפטיים. אנו הופכים את בדיקות WCAG 2.1 לאוטומטיות באמצעות axe-core, ומשלבים אותן בתהליכי ה-CI/CD ובמסגרות הבדיקות שלכם. הצוות שלנו מספק את הפרויקט במפתח מלא—מביקורת המצב הנוכחי ועד ליישום ותמיכה שוטפת, תוך הבטחת הגנה אמינה מפני רגרסיות.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
Axe-core: אוטומציה של בדיקות WCAG 2.1 עם Jest ו-Playwright
בינוני
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1306
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

Axe-core: אוטומציה של בדיקות WCAG 2.1 עם Jest ו-Playwright

לעתים קרובות, בעיות נגישות (a11y) מתגלות רק במהלך בדיקות ידניות או, גרוע מכך, בסביבת הייצור. כל באג קריטי שפספסנו – לדוגמה, חסר alt בתמונה או ניווט מקלדת שאינו פונקציונלי – יכול לעלות לנו במוניטין ובקנסות כבדים. אנו מבצעים אוטומציה של בדיקות WCAG 2.1/2.2 עם axe-core כדי לתפוס בעיות כאלה בשלב ה-CI/CD. ספריית Deque Systems מזהה אוטומטית כ-57% מההפרות, ומשאירה את השאר לבדיקה ידנית. הניסיון מראה שלאחר הטמעת axe-core, רגרסיות נגישות יורדות ב-70–80%.

כיצד axe-core מסייע באוטומציה של בדיקות נגישות

axe-core פועל גם בדפדפן וגם ב-Node.js, וניתן לשלבם בקלות במסגרות בדיקה קיימות. הכללים שלו מבוססים על WCAG 2.1, ומקובצים לפי תגיות (wcag2a, wcag2aa, wcag21aa). עבור כל רכיב בעמוד, הספרייה בודקת: ניגודיות, סמנטיקה של כותרות, נגישות טפסים, תכונות ARIA ועוד. התוצאה היא דוח מובנה עם סוג, רמת חומרה והפניה לרכיב.

אינטגרציה עם Jest + Testing Library

npm install --save-dev jest-axe @testing-library/react 
// __tests__/accessibility.test.tsx
import { render } from '@testing-library/react';
import { axe, toHaveNoViolations } from 'jest-axe';

expect.extend(toHaveNoViolations);

describe('Доступность компонентов', () => {
  it('Button не имеет нарушений', async () => {
    const { container } = render(<Button>Отправить</Button>);
    const results = await axe(container);
    expect(results).toHaveNoViolations();
  });

  it('Form не имеет нарушений', async () => {
    const { container } = render(
      <form>
        <label htmlFor="email">Email</label>
        <input id="email" type="email" />
        <button type="submit">Войти</button>
      </form>
    );
    const results = await axe(container, {
      rules: {
        'color-contrast': { enabled: true },
        'label': { enabled: true },
      },
    });
    expect(results).toHaveNoViolations();
  });
});

אינטגרציה עם Playwright

// tests/accessibility.spec.ts
import { test, expect } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright';

test('Главная страница проходит WCAG 2.1 AA', async ({ page }) => {
  await page.goto('/');
  const results = await new AxeBuilder({ page })
    .withTags(['wcag2a', 'wcag2aa', 'wcag21aa'])
    .exclude('.cookie-banner') // Исключаем компоненты третьих сторон
    .analyze();
  expect(results.violations).toEqual([]);
});

test('Форма регистрации — доступность', async ({ page }) => {
  await page.goto('/register');
  const results = await new AxeBuilder({ page })
    .include('#registration-form')
    .analyze();
  // Детальный отчёт при падении
  if (results.violations.length > 0) {
    console.table(results.violations.map(v => ({
      id: v.id,
      impact: v.impact,
      description: v.description,
      nodes: v.nodes.length,
    })));
  }
  expect(results.violations).toEqual([]);
});

מדוע לשלב את axe-core ב-CI/CD?

בדיקות נגישות ידניות קשה להרחיב: בדיקת עמוד בודד אורכת 2–3 שעות. שילוב axe-core ב-CI/CD (לדוגמה, באמצעות בדיקת Playwright לפני כל פריסה) הופך את הבדיקה הזו לאוטומטית. אנו מבטיחים שהפרות קריטיות לא יגיעו לסביבת הייצור. בפרויקט אחד עם 500+ עמודים, לאחר הגדרת axe-core, רגרסיות נגישות ירדו מ-30 ל-2–3 בחודש.

השוואה בין בדיקה ידנית לאוטומטית

מאפיין בדיקה ידנית axe-core
זמן לכל עמוד 15–30 דקות 5–10 שניות
כיסוי הפרות קריטיות 100% (עם מומחה מוסמך) ~90%
תדירות הרצה פעם אחת לכל ספרינט כל commit
דיוק תלוי בעייפות יציב

רמות חומרה והשפעתן

חומרה משמעות דוגמה הסמכת WCAG
קריטי חוסם גישה תמונה ללא alt לא עובר אף רמה
חמור מפריע משמעותית טופס ללא תווית לא עובר AA
בינוני מקשה על השימוש ניגודיות לא מספקת עשוי לעבור A אך לא AA
קל אי נוחות קטנה lang שגוי עובר, אך עדיף לתקן

מאיפה להתחיל: טעויות נפוצות בהגדרת axe-core

בהרצה הראשונה, axe-core מייצר לעתים קרובות תוצאות חיוביות שגויות על iframes של צד שלישי, באנרים של עוגיות או תוכן שנטען דינמית. כדי למנוע רעש, הגדירו חריגים באמצעות npm install --save-dev jest-axe @testing-library/react וציינו תגיות בדיקה מדויקות (לדוגמה, // __tests__/accessibility.test.tsx import { render } from '@testing-library/react'; import { axe, toHaveNoViolations } from 'jest-axe'; expect.extend(toHaveNoViolations); describe('Доступность компонентов', () => { it('Button не имеет нарушений', async () => { const { container } = render(<Button>Отправить</Button>); const results = await axe(container); expect(results).toHaveNoViolations(); }); it('Form не имеет нарушений', async () => { const { container } = render( <form> <label htmlFor="email">Email</label> <input id="email" type="email" /> <button type="submit">Войти</button> </form> ); const results = await axe(container, { rules: { 'color-contrast': { enabled: true }, 'label': { enabled: true }, }, }); expect(results).toHaveNoViolations(); }); }); ). כמו כן, חשוב להגדיר נכון את הכללים: השביתו את אלה שאינם רלוונטיים לפרויקט (לדוגמה, // tests/accessibility.spec.ts import { test, expect } from '@playwright/test'; import AxeBuilder from '@axe-core/playwright'; test('Главная страница проходит WCAG 2.1 AA', async ({ page }) => { await page.goto('/'); const results = await new AxeBuilder({ page }) .withTags(['wcag2a', 'wcag2aa', 'wcag21aa']) .exclude('.cookie-banner') // Исключаем компоненты третьих сторон .analyze(); expect(results.violations).toEqual([]); }); test('Форма регистрации — доступность', async ({ page }) => { await page.goto('/register'); const results = await new AxeBuilder({ page }) .include('#registration-form') .analyze(); // Детальный отчёт при падении if (results.violations.length > 0) { console.table(results.violations.map(v => ({ id: v.id, impact: v.impact, description: v.description, nodes: v.nodes.length, }))); } expect(results.violations).toEqual([]); }); עבור רכיבים עם צבעים מותאמים אישית).

רשימת בדיקה להטמעת axe-core

  • החריגו iframes וווידג'טים של צד שלישי.
  • הגדירו כללים מותאמים אישית לרכיבים ספציפיים.
  • שלבו עם Jest לבדיקות יחידה של רכיבים.
  • שלבו עם Playwright לבדיקות e2e של עמודים קריטיים.
  • הוסיפו ריצה ל-CI/CD (GitHub Actions, GitLab CI).
  • הגדירו התראות על כשלים.

מה כלול בעבודה

  • תיעוד: דוח של הפרות נוכחיות, רשימת כללים, חריגים לרכיבי צד שלישי.
  • אינטגרציה: הגדרת axe-core ב-Jest (בדיקות יחידה לרכיבים), Playwright (בדיקות e2e לעמודים) ו-Storybook (בדיקה ויזואלית) – לפי הצורך.
  • צינור CI/CD: הוספת בדיקות נגישות ל-GitLab CI, GitHub Actions או דומה.
  • הכשרת צוות: הרצאה בסיסית (1–2 שעות) על WCAG ועבודה עם axe-core.
  • תמיכה: ייעוץ לתיקון הפרות שזוהו במשך חודש לאחר ההטמעה.

לוחות זמנים

הגדרת axe-core ב-Jest + Playwright, כיסוי עמודים ורכיבים מרכזיים: 2–3 ימי עסקים. אם הפרויקט משתמש במסגרות לא סטנדרטיות (Angular, Vue 3 עם SSR) או דורש התאמה עמוקה של כללים, לוח הזמנים עשוי להתארך ל-5 ימים. אנו עובדים עם מקדמה של 50%; העלות הסופית מחושבת באופן אישי לאחר בדיקת הקוד שלכם.

לצוות שלנו ניסיון של 5+ שנים בבדיקות נגישות ויותר מ-50 פרויקטים מוצלחים. צרו קשר לייעוץ על שילוב axe-core בפרויקט שלכם. הזמינו בדיקת נגישות – זה יפחית סיכונים ויחסוך זמן.