Для интеграции Axe-core в существующий проект на JavaScript необходимо сначала установить пакет через npm или yarn:
npm install axe-core --save-dev
или
yarn add axe-core --dev
После установки библиотеку можно подключить в коде:
import axe from 'axe-core';
Для старых проектов с использованием CommonJS:
const axe = require('axe-core');
В браузерных проектах возможно подключение через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.6.3/axe.min.js"></script>
Для запуска анализа доступности используется метод run,
который принимает DOM-узел или документ целиком. В простейшем случае
проверка выглядит так:
axe.run(document, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
Ключевые моменты:
document — корневой узел, с которого начинается
сканирование. Можно передать любой элемент DOM.results.violations — массив объектов, описывающих
найденные нарушения.err — ошибка выполнения, обычно связана с некорректной
структурой DOM.Библиотека позволяет включать или отключать отдельные правила и ограничивать область проверки. Например:
axe.run(document.getElementById('main-content'), {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
},
rules: {
'color-contrast': { enabled: false },
'image-alt': { enabled: true }
}
}, (err, results) => {
console.log(results.violations);
});
runOnly позволяет выбрать набор правил по тегам или
ID.rules — настройка каждого конкретного правила:
включение/отключение и дополнительные параметры.Начиная с версии 3, Axe-core поддерживает промисы, что удобно для интеграции с современными фреймворками:
axe.run(document).then(results => {
console.log(results.violations);
}).catch(err => {
console.error(err);
});
Это позволяет использовать async/await:
async function checkAccessibility() {
try {
const results = await axe.run(document);
console.log(results.violations);
} catch (err) {
console.error(err);
}
}
Для автоматизированного тестирования можно использовать Axe-core вместе с Cypress:
import 'cypress-axe';
describe('Accessibility tests', () => {
it('Main page should be accessible', () => {
cy.visit('/');
cy.injectAxe();
cy.checkA11y(null, {
runOnly: ['wcag2aa']
});
});
});
cy.injectAxe() — внедряет библиотеку в контекст
браузера.cy.checkA11y() — запускает проверку доступности и
автоматически выводит отчёт в консоль.Для компонентов React возможна интеграция через Jest:
import { render } from '@testing-library/react';
import { axe, toHaveNoViolations } from 'jest-axe';
expect.extend(toHaveNoViolations);
test('Button component should have no accessibility violations', async () => {
const { container } = render(<Button label="Click me" />);
const results = await axe(container);
expect(results).toHaveNoViolations();
});
toHaveNoViolations позволяет прямо в тесте проверять
отсутствие нарушений.Axe-core возвращает объект results с массивами
violations, passes, incomplete и
inapplicable. Каждый элемент содержит:
id — идентификатор правила.impact — уровень критичности (critical,
serious, moderate, minor).description — текстовое описание проблемы.helpUrl — ссылка на документацию.nodes — список DOM-узлов, на которых найдено нарушение,
с указанием селекторов и HTML-контента.Для генерации собственного отчёта можно использовать:
const report = results.violations.map(v => ({
rule: v.id,
impact: v.impact,
nodes: v.nodes.map(n => n.target)
}));
console.table(report);
npm start.getStaticProps или в useEffect для
динамических страниц.Интеграция Axe-core позволяет превратить доступность из отдельного этапа проверки в непрерывный процесс разработки, повышая качество интерфейсов и соответствие стандартам WCAG.