Axe-core — это библиотека для автоматизированного тестирования доступности веб-приложений, реализованная на JavaScript. Она позволяет выявлять проблемы доступности, соответствие стандартам WCAG (Web Content Accessibility Guidelines) и ускоряет процесс интеграции проверок доступности в CI/CD-пайплайны.
Для использования библиотеки в проекте Node.js необходимо установить пакет через npm:
npm install axe-core
В браузерной среде библиотека может быть подключена через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.8.6/axe.min.js"></script>
После подключения библиотеки создаётся объект axe, через
который выполняются все проверки доступности.
Axe-core позволяет гибко настраивать правила проверки. Основные параметры конфигурации:
runOnly — список правил, которые
необходимо выполнить. Может быть массивом идентификаторов правил или
объектом с группами.rules — детальная настройка конкретных
правил, включая их включение или исключение.reporter — формат вывода результатов
проверки (например, v2, v3,
json).Пример конфигурации для проверки только критических правил:
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
},
rules: {
'color-contrast': { enabled: true },
'image-alt': { enabled: true }
}
}).then(results => {
console.log(results.violations);
});
Результат выполнения функции axe.run содержит следующие
ключевые поля:
violations — массив найденных
нарушений. Каждое нарушение включает:
id — уникальный идентификатор правила.impact — степень важности (minor,
moderate, serious,
critical).description — описание проблемы.help и helpUrl — подсказки по исправлению
и ссылка на документацию.nodes — список DOM-элементов, где выявлено
нарушение.passes — элементы, успешно
прошедшие проверку.
incomplete — проверки,
завершившиеся частично из-за ограничений контента или динамических
элементов.
inapplicable — правила, которые не
применимы к текущей странице.
Axe-core легко интегрируется с Jest, Mocha, Cypress и другими тестовыми фреймворками. Пример использования с Jest:
const { configureAxe, toHaveNoViolations } = require('jest-axe');
expect.extend(toHaveNoViolations);
test('Главная страница без нарушений доступности', async () => {
const html = renderToString(<App />);
const results = await configureAxe(axe).run(html);
expect(results).toHaveNoViolations();
});
В среде браузера с Cypress проверка может выглядеть так:
cy.visit('/home');
cy.injectAxe();
cy.checkA11y(null, {
runOnly: ['wcag2aa']
});
Для командной работы важно внедрить стандартизированные подходы:
context для проверки только критичных
частей страницы или компонентов.Для одностраничных приложений или компонентов, загружаемых
асинхронно, проверка доступности должна выполняться после полной
отрисовки контента. В JavaScript это достигается через
MutationObserver или асинхронные колбэки:
const observer = new MutationObserver(async () => {
const results = await axe.run(document);
console.log(results.violations);
});
observer.observe(document.body, { childList: true, subtree: true });
Axe-core поддерживает плагины и расширения для специфических фреймворков:
axe-webdriverjs — интеграция с Selenium WebDriver.axe-puppeteer — проверка доступности через
Puppeteer.axe-playwright — интеграция с Playwright.Каждое расширение сохраняет общую структуру результатов, что позволяет использовать единый подход к анализу данных.
Если требуется, могу подготовить отдельный раздел с реальными примерами исправления типичных нарушений, включая пошаговую визуализацию DOM и исправления кода. Это будет полезно для учебника по практическому применению axe-core. Хотите, чтобы я это сделал?