Библиотека Axe-core является мощным инструментом для автоматизированного тестирования доступности веб-приложений. Она поставляется в виде NPM-пакета и может использоваться как в браузерных, так и в серверных средах. Установка производится стандартной командой:
npm install axe-core --save-dev
После установки библиотеку можно подключить в проекте:
import axe from 'axe-core';
В браузерных сценариях можно подключать скрипт напрямую через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.6.4/axe.min.js"></script>
После подключения библиотека доступна через глобальный объект
axe.
Axe-core анализирует DOM страницы и выявляет нарушения принципов доступности согласно стандартам WCAG 2.1. Алгоритм проверки строится на следующих компонентах:
Пример базового вызова проверки всей страницы:
axe.run(document, {}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
Здесь results.violations содержит массив объектов с
информацией о нарушениях: их тип, уровень критичности, элементы и
рекомендации по исправлению.
Библиотека предоставляет возможность гибко управлять проверками:
const options = {
runOnly: {
type: 'rule',
values: ['color-contrast', 'image-alt']
}
};
axe.run(document, options, (err, results) => {
console.log(results.violations);
});
wcag2a, wcag2aa,
best-practice) и запускать проверки только для определённых
категорий.const options = {
runOnly: {
type: 'tag',
values: ['wcag2aa', 'best-practice']
}
};
const options = {
rules: {
'color-contrast': { enabled: true },
'image-alt': { enabled: true }
},
include: [['#main-content']],
exclude: [['.ignore-for-a11y']]
};
Axe-core поддерживает как асинхронные, так и синхронные вызовы. Асинхронный режим используется в браузере и Node.js:
(async () => {
const results = await axe.run(document);
console.log(results.violations);
})();
Синхронный вызов полезен при интеграции с тестовыми фреймворками, где требуется немедленный результат анализа DOM:
const results = axe.run(document, { runOnly: { type: 'tag', values: ['wcag2a'] } });
console.log(results.violations);
Axe-core легко интегрируется с Jest, Mocha, Cypress, Playwright и другими инструментами тестирования. Примеры:
import { configureAxe, toHaveNoViolations } from 'jest-axe';
expect.extend(toHaveNoViolations);
test('component should be accessible', async () => {
const results = await configureAxe(axe).run(container);
expect(results).toHaveNoViolations();
});
import 'cypress-axe';
cy.visit('/page');
cy.injectAxe();
cy.checkA11y();
Интеграция позволяет запускать проверки доступности в процессе CI/CD, обеспечивая автоматическую проверку каждой сборки.
Каждое нарушение в results.violations включает следующие
ключевые поля:
critical, serious, moderate,
minor).html,
target, failureSummary).Пример форматирования вывода:
results.violations.forEach(v => {
console.log(`Правило: ${v.id} (${v.impact})`);
console.log(`Описание: ${v.description}`);
v.nodes.forEach(node => {
console.log(`Элемент: ${node.target.join(', ')}`);
console.log(`Сводка: ${node.failureSummary}`);
});
});
Такой подход позволяет создавать отчёты, пригодные для анализа и передачи разработчикам.
includedHidden: false.axe.registerRule(ruleDefinition).Пример добавления собственного правила:
axe.registerRule({
id: 'custom-heading',
selector: 'h1,h2,h3,h4,h5,h6',
evaluate: node => node.textContent.length > 0,
metadata: { impact: 'moderate', help: 'Заголовки должны содержать текст' }
});
Для быстрого анализа доступности в браузере можно использовать интеграцию Axe-core с расширениями Chrome и Firefox. Расширение позволяет:
Использование расширения особенно удобно при отладке UI и проверке отдельных компонентов без запуска полноценного тестового окружения.