Axe-core — это мощная библиотека для автоматизированного тестирования доступности веб-приложений. Она ориентирована на проверку соответствия стандартам WCAG (Web Content Accessibility Guidelines), ARIA и общим практикам обеспечения доступности. Основная цель библиотеки — выявление элементов интерфейса, которые могут создавать барьеры для пользователей с различными ограничениями.
Ключевые принципы работы Axe-core:
Axe-core распространяется как npm-пакет и может использоваться как в браузерных, так и в Node.js средах.
Пример установки:
npm install axe-core
Для браузерного использования библиотека подключается через скрипт:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.8.0/axe.min.js"></script>
В Node.js можно использовать её совместно с фреймворками тестирования, такими как Jest или Mocha:
const axe = require('axe-core');
Перед запуском проверок необходимо инициализировать Axe-core на странице:
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2aa', 'section508']
}
}, function(err, results) {
if (err) throw err;
console.log(results.violations);
});
Результаты работы Axe-core структурированы и содержат несколько ключевых элементов:
violations — список нарушений с описанием проблемы,
локализацией и рекомендациями по исправлению.passes — элементы, прошедшие проверки.incomplete — элементы, которые требуют ручной
проверки.inapplicable — элементы, на которые правила не
распространяются.Каждое нарушение сопровождается подробной информацией: CSS-селектор элемента, текстовое описание проблемы, приоритет исправления и ссылки на официальные рекомендации WCAG.
Для удобства интеграции с CI/CD процессами результаты можно экспортировать в JSON, а затем визуализировать через сторонние инструменты:
const fs = require('fs');
axe.run(document).then(results => {
fs.writeFileSync('axe-report.json', JSON.stringify(results, null, 2));
});
Дополнительно возможно использовать веб-плагины для визуализации нарушений прямо на странице.
Axe-core может быть встроена на нескольких этапах жизненного цикла проекта:
Пример использования в Jest:
const { configureAxe, toHaveNoViolations } = require('jest-axe');
expect.extend(toHaveNoViolations);
test('Компонент доступен', async () => {
const { container } = render(<MyComponent />);
const axe = configureAxe();
const results = await axe(container);
expect(results).toHaveNoViolations();
});
Библиотека поддерживает добавление собственных правил для проверки специфических требований:
axe.registerRule({
id: 'custom-color-contrast',
selector: '*',
enabled: true,
any: [{
id: 'color-contrast',
evaluate: node => {
const contrast = getContrast(node);
return contrast >= 4.5;
}
}],
metadata: {
impact: 'serious',
description: 'Проверка контраста текста для доступности'
}
});
Кастомные правила позволяют расширять возможности библиотеки, добавлять специфические проверки корпоративных стандартов или учитывать особенности дизайна.
Для больших приложений важно учитывать производительность сканирования:
wcag2aa.async/await для минимизации блокировки UI в браузере.Axe-core поддерживает эти оптимизации, что делает её подходящей даже для сложных интерфейсов с динамическим контентом.
Библиотека интегрируется с популярными фреймворками:
react-testing-library.vue-test-utils.TestBed.Это позволяет строить полноценный workflow автоматизированной проверки доступности на всех уровнях приложения — от единичных компонентов до полной страницы.
Axe-core умеет обрабатывать динамически создаваемые элементы и корректно интерпретировать ARIA-атрибуты:
aria-label,
aria-hidden, role.MutationObserver.Эти возможности позволяют встроить библиотеку в современные SPA и обеспечивать непрерывный контроль доступности.