Библиотека Axe-core представляет собой мощный инструмент для автоматизированного тестирования доступности веб-приложений, разработанный с акцентом на соблюдение стандартов WCAG (Web Content Accessibility Guidelines). Она позволяет выявлять ошибки доступности, а также интегрируется с тестами в браузере и среде Node.js. Основная функциональность сосредоточена вокруг инспектирования DOM-элементов и анализа их соответствия правилам доступности.
Для работы с Axe-core в браузере используется подключение через
<script> или пакет axe-core через
npm:
// Node.js / npm
const axe = require('axe-core');
// Браузерный вариант через CDN
// <script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.9.7/axe.min.js"></script>
После подключения библиотека предоставляет метод
axe.run(), который анализирует текущий DOM или указанный
контейнер:
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
},
rules: {
'color-contrast': { enabled: true },
'label': { enabled: true }
}
}).then(results => {
console.log(results.violations);
});
Ключевые моменты и параметры:
runOnly — позволяет ограничить набор правил по тегам
или конкретным идентификаторам правил.rules — ручная настройка активации или деактивации
отдельных правил.document — объект DOM, который будет анализироваться;
может быть конкретным элементом.Результаты работы axe.run() возвращают объект с
несколькими массивами, среди которых:
violations — список обнаруженных нарушений доступности. Каждое нарушение содержит:
id — уникальный идентификатор правила;impact — уровень важности (minor,
moderate, serious,
critical);description — краткое описание проблемы;nodes — массив элементов DOM, на которых обнаружено
нарушение, включая html, target,
failureSummary.passes — список элементов, успешно прошедших проверку.
incomplete — элементы, по которым недостаточно данных для окончательного заключения.
inapplicable — правила, которые не применяются к текущему DOM.
Пример обработки нарушений:
axe.run(document).then(results => {
results.violations.forEach(violation => {
console.log(`Правило: ${violation.id} (${violation.impact})`);
violation.nodes.forEach(node => {
console.log(`Элемент: ${node.target}`);
console.log(`Подробности: ${node.failureSummary}`);
});
});
});
Axe-core позволяет гибко настраивать инспектирование элементов:
const container = document.querySelector('#main-content');
axe.run(container).then(results => console.log(results));
Исключения: можно пропускать отдельные элементы
с помощью атрибута data-axe-ignore="true".
Фильтрация по критичности: для фокусировки на наиболее серьёзных нарушениях:
axe.run(document).then(results => {
const criticalIssues = results.violations.filter(v => v.impact === 'critical');
console.log(criticalIssues);
});
Axe-core поддерживает анализ динамически изменяемого DOM. Для этого
используется повторный вызов axe.run() после изменения
интерфейса или интеграция с наблюдателями
MutationObserver:
const observer = new MutationObserver(() => {
axe.run(document.getElementById('dynamic-section'))
.then(results => console.log(results.violations));
});
observer.observe(document.body, { childList: true, subtree: true });
Такой подход позволяет автоматически проверять доступность новых элементов, появляющихся после действий пользователя или асинхронной загрузки данных.
Для unit- и e2e-тестов Axe-core предоставляет API для Node.js и браузера. Пример использования с Jest:
const { configureAxe, axe } = require('jest-axe');
const { render } = require('@testing-library/react');
test('доступность компонента', async () => {
const { container } = render(<MyComponent />);
const results = await axe(container);
expect(results).toHaveNoViolations();
});
Основные моменты:
jest-axe предоставляет удобные матчер-функции
(toHaveNoViolations).render из @testing-library/react позволяет
получить DOM-узел для анализа.Axe-core поддерживает расширение с помощью:
Пример добавления пользовательского правила:
axe.configure({
rules: [
{
id: 'custom-label-check',
selector: 'input[type="text"]',
any: [{
match: node => node.hasAttribute('aria-label') || node.labels.length > 0
}],
enabled: true
}
]
});
MutationObserver
для непрерывного контроля за доступностью.Axe-core обеспечивает системный и детальный подход к инспектированию элементов DOM, делая проверку доступности автоматизированной, масштабируемой и интегрируемой с современными фреймворками JavaScript.