Axe-core — это мощная библиотека для автоматического тестирования доступности веб-приложений, соответствующая стандартам WCAG (Web Content Accessibility Guidelines). Она реализует набор правил, позволяющих выявлять нарушения доступности на страницах, компонентах и интерактивных элементах.
Библиотека работает на клиентской стороне в браузере и интегрируется с различными инструментами тестирования, включая Jest, Cypress, Puppeteer и Playwright. Основной механизм работы — сканирование DOM-дерева и анализ атрибутов элементов на предмет соблюдения правил доступности.
Axe-core распространяется как npm-пакет:
npm install axe-core
Для использования в Node.js или браузере требуется импорт:
const axe = require('axe-core');
В браузере можно подключить скрипт напрямую через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.8.3/axe.min.js"></script>
После подключения библиотека готова к сканированию страницы с помощью
метода axe.run().
Метод axe.run() запускает проверку доступности на
заданном узле DOM. Если узел не указан, проверяется весь документ.
axe.run(document, {}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
Ключевые элементы результата:
violations — массив обнаруженных нарушений с
описанием.passes — элементы, которые соответствуют правилам.incomplete — проверки, которые не удалось
завершить.inapplicable — правила, которые не применяются к
текущему контенту.Каждое нарушение содержит:
id — идентификатор правила.impact — уровень важности (minor, moderate, serious,
critical).description — краткое описание проблемы.help и helpUrl — рекомендации и ссылки на
документацию.nodes — элементы DOM, где обнаружено нарушение.Axe-core позволяет включать или отключать отдельные правила для более точного тестирования. Правила настраиваются через объект опций:
const options = {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
},
rules: {
'color-contrast': { enabled: true },
'label': { enabled: false }
}
};
axe.run(document, options, (err, results) => {
console.log(results.violations);
});
Особенности настройки:
runOnly позволяет запускать проверку только по
определенным тегам WCAG.rules позволяет индивидуально включать или отключать
конкретные проверки.resultTypes может ограничивать вывод только нарушениями
или полными результатами.Jest:
const { configureAxe, toHaveNoViolations } = require('jest-axe');
expect.extend(toHaveNoViolations);
test('страница доступна', async () => {
const results = await configureAxe(axe).run(document.body);
expect(results).toHaveNoViolations();
});
Cypress:
import 'cypress-axe';
cy.visit('/example-page');
cy.injectAxe();
cy.checkA11y(null, {
includedImpacts: ['critical', 'serious']
});
Эти интеграции позволяют включить проверки доступности в процесс CI/CD и автоматически выявлять ошибки при каждом деплое.
Результаты сканирования часто представляют в виде отчета JSON или выводят в консоль. Для удобства анализа можно использовать фильтрацию по уровню воздействия или типу нарушения:
const criticalViolations = results.violations.filter(v => v.impact === 'critical');
criticalViolations.forEach(v => console.log(v.help, v.nodes.length));
Также доступна визуализация нарушений прямо на странице с помощью
метода axe.highlightNode(node) (требует подключения
дополнительных модулей).
Axe-core ориентирована на соответствие стандартам:
Библиотека классифицирует нарушения по уровню важности
(impact), что помогает приоритизировать исправления.
axe.registerRule({
id: 'custom-heading-check',
selector: 'h1',
evaluate: node => node.textContent.length > 0
});
Локальные и глобальные опции Позволяют применять разные наборы правил к разным частям приложения, например, к компонентам UI отдельно от полной страницы.
Асинхронные проверки Поддержка
Promise позволяет интегрировать сканирование в асинхронные
процессы тестирования.
const results = await axe.run(document);
console.log(results.violations);
impact для концентрации на
критических нарушениях.Axe-core обеспечивает строгий контроль доступности и позволяет интегрировать автоматическое тестирование прямо в процесс разработки и развертывания, обеспечивая соответствие современным стандартам веб-доступности.