Axe-core — это мощная библиотека для автоматизированного тестирования доступности веб-приложений. Она позволяет выявлять проблемы с доступностью (a11y) на уровне DOM, поддерживает интеграцию с различными инструментами тестирования и подходит для работы как в браузере, так и в среде Node.js.
Для использования Axe-core в проекте на JavaScript достаточно установить пакет через npm:
npm install axe-core --save-dev
В браузерных сценариях библиотека подключается через
<script> или с помощью bundler’ов:
import axe from 'axe-core';
Важный момент: Axe-core не запускается сам по себе на сервере без
DOM, поэтому для Node.js чаще используют связку с jsdom или
тестовыми фреймворками, поддерживающими эмуляцию DOM, например
Playwright или Puppeteer.
Основной метод для запуска сканирования — axe.run. Он
принимает DOM-узел и объект с настройками:
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
},
rules: {
'color-contrast': { enabled: true },
'image-alt': { enabled: true }
}
}).then(results => {
console.log(results.violations);
});
Ключевые моменты:
runOnly — ограничивает набор правил по
тегам, стандартам или конкретным правилам.rules — позволяет включать или
отключать отдельные проверки.violations,
описывающий найденные проблемы, их местоположение в DOM, уровень
серьезности и рекомендации.Axe-core часто используется вместе с Playwright для интеграционного тестирования. Сценарий типичного теста:
import { test, expect } from '@playwright/test';
import axe from 'axe-core';
test('Проверка доступности страницы', async ({ page }) => {
await page.goto('https://example.com');
// Вставка axe-core в браузерную страницу
await page.addScriptTag({ path: require.resolve('axe-core/axe.min.js') });
// Выполнение сканирования в контексте страницы
const violations = await page.evaluate(async () => {
return await axe.run(document, {
runOnly: { type: 'tag', values: ['wcag2aa'] }
});
});
console.log(violations.violations);
expect(violations.violations.length).toBe(0);
});
Особенности интеграции:
page.addScriptTag загружает axe-core в
контекст страницы, что позволяет работать с реальным DOM.page.evaluate выполняет функцию в
браузере, возвращая результаты обратно в Node.js.Axe-core включает сотни правил, сгруппированных по тегам WCAG. Основные параметры конфигурации:
rules — объект, где ключи — имена
правил, а значения — настройки. Пример: отключение проверки
контраста:rules: { 'color-contrast': { enabled: false } }
runOnly — можно указать набор тегов
(wcag2a, wcag2aa, wcag21aa) или
конкретных правил:runOnly: { type: 'rule', values: ['image-alt', 'label'] }
resultTypes — позволяет фильтровать
типы результатов: violations, incomplete,
passes, inapplicable.Объект violations содержит ключевые поля:
id — идентификатор правила.impact — уровень серьезности
(critical, serious, moderate,
minor).description — краткое описание
проблемы.help — ссылка на руководство по
исправлению.nodes — массив DOM-элементов с
проблемой, содержащий CSS-селекторы и HTML.Пример обработки:
violations.violations.forEach(v => {
console.log(`Проблема: ${v.description} (уровень: ${v.impact})`);
v.nodes.forEach(node => {
console.log(` Элемент: ${node.html}`);
});
});
Axe-core хорошо интегрируется с CI/CD:
Пример конфигурации в GitHub Actions:
- name: Run Playwright accessibility tests
run: npx playwright test --project=chromium
jest-axe для unit-тестирования компонентов React/Vue.Axe-core обеспечивает детальный и стандартизированный подход к проверке доступности, позволяя выявлять проблемы на ранних стадиях разработки и обеспечивать соответствие стандартам WCAG.