Для начала работы с библиотекой Axe-core необходимо её установить. В среде Node.js это делается через npm:
npm install axe-core
Для браузерного окружения можно подключить скрипт напрямую:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.8.0/axe.min.js"></script>
После подключения библиотека доступна как глобальный объект
axe.
Анализ всей страницы начинается с вызова метода
axe.run(). Он принимает объект с конфигурацией и возвращает
промис с результатами:
axe.run(document, {
runOnly: ['wcag2a', 'wcag2aa'],
reporter: 'v2'
}).then(results => {
console.log(results.violations);
});
Ключевые моменты:
runOnly — фильтрует правила, которые будут применяться
(например, уровни WCAG).reporter — определяет формат вывода (могут быть
v1, v2, v3 или
пользовательский).Если аргумент document опущен, библиотека проанализирует
весь текущий DOM по умолчанию.
Результаты анализа возвращаются объектом, содержащим несколько массивов:
violations — ошибки доступности, которые требуют
исправления.passes — элементы, прошедшие проверку.incomplete — элементы, для которых проверка не может
быть завершена.inapplicable — правила, которые не применимы к текущему
DOM.Каждый объект из violations содержит поля:
id — идентификатор правила.impact — степень влияния (minor,
moderate, serious,
critical).description — текстовое описание проблемы.help — краткое руководство по исправлению.nodes — массив DOM-элементов, на которых обнаружена
ошибка.Пример объекта nodes:
{
"html": "<button>Click me</button>",
"target": ["button"],
"failureSummary": "Button element has no accessible name"
}
Библиотека позволяет включать или отключать отдельные правила:
axe.configure({
rules: [
{ id: 'color-contrast', enabled: true },
{ id: 'label', enabled: false }
]
});
id — идентификатор правила, совпадает с
violation.id.enabled — включает или отключает проверку.Можно создавать собственные правила, передавая их в
axe.registerRule() с описанием, функцией проверки и уровнем
влияния.
axe.run() возвращает промис, что позволяет использовать
как then/catch, так и async/await:
async function analyzePage() {
const results = await axe.run();
results.violations.forEach(v => {
console.log(v.id, v.impact, v.nodes.length);
});
}
analyzePage();
Важно обрабатывать ошибки промиса, так как при динамическом DOM возможны исключения.
Для автоматизации анализа доступности часто используют тестовые фреймворки, например Jest или Mocha. Пример с Jest:
const { configureAxe, toHaveNoViolations } = require('jest-axe');
expect.extend(toHaveNoViolations);
test('Главная страница доступна', async () => {
const results = await configureAxe(axe).run(document.body);
expect(results).toHaveNoViolations();
});
Такой подход позволяет включить проверку доступности в процесс CI/CD.
Для анализа не всей страницы, а только её части, можно передавать селекторы или элементы DOM:
const mainContent = document.querySelector('#main');
axe.run(mainContent).then(results => console.log(results.violations));
Это ускоряет проверку и позволяет сосредоточиться на критических областях.
runOnly для
конкретных правил.Для визуальной диагностики можно подсвечивать элементы с проблемами:
results.violations.forEach(v => {
v.nodes.forEach(node => {
const el = document.querySelector(node.target[0]);
if(el) el.style.border = '2px solid red';
});
});
Это упрощает идентификацию проблем на странице и ускоряет исправление.
axe-core/react для проверки компонентов.cypress-axe позволяет
проверять страницы в автоматических e2e-тестах.runOnly для частых проверок и полный набор
правил только перед релизом.impact и исправлять сначала критические
ошибки (critical), затем serious, и так
далее.Axe-core предоставляет детализированный и структурированный подход к проверке доступности, позволяя интегрировать анализ как в ручное тестирование, так и в автоматические процессы. Оптимальное использование методов конфигурации, фильтрации и отчетности позволяет поддерживать высокий уровень доступности на всех страницах веб-приложения.