Для использования axe-core в проекте на JavaScript
необходимо сначала установить библиотеку через npm:
npm install axe-core
Подключение в коде может осуществляться как через
require (Node.js), так и через import
(ES6):
// ES6
import axe from 'axe-core';
// CommonJS
const axe = require('axe-core');
Базовый запуск анализа страницы выполняется с помощью функции
axe.run(). Она возвращает объект с результатами,
включающими найденные проблемы доступности (violations),
рекомендации (incomplete) и информационные сообщения
(passes).
axe.run(document, {
runOnly: ['wcag2a', 'wcag2aa']
}, (err, results) => {
if (err) throw err;
console.log(results);
});
Объект результатов содержит несколько ключевых массивов:
violations — нарушения, требующие исправления.passes — элементы, соответствующие стандартам.incomplete — элементы с недостаточной информацией для
проверки.inapplicable — элементы, к которым правила
неприменимы.Каждый объект в массиве violations содержит:
id — уникальный идентификатор правила.impact — уровень серьёзности (minor,
moderate, serious,
critical).description — краткое описание проблемы.help — советы по исправлению.nodes — конкретные элементы DOM, нарушающие
правило.Пример элемента nodes:
{
"html": "<button>Click me</button>",
"target": ["#myButton"],
"failureSummary": "Элемент кнопки не имеет описательного текста для экранных читалок."
}
Для быстрого просмотра можно использовать стандартный
console.log или библиотеку console.table:
results.violations.forEach(v => {
console.log(`Правило: ${v.id}, Влияние: ${v.impact}`);
v.nodes.forEach(node => console.log(`Элемент: ${node.html}\nПричина: ${node.failureSummary}`));
});
Для табличного представления:
console.table(results.violations.map(v => ({
Правило: v.id,
Влияние: v.impact,
Описание: v.help
})));
axe-core предлагает API axe.run() в
комбинации с DOM, что позволяет создавать настраиваемые визуальные
отчёты прямо на странице. Например, можно динамически создавать панель с
результатами:
const container = document.createElement('div');
container.style.position = 'fixed';
container.style.top = '0';
container.style.right = '0';
container.style.background = 'white';
container.style.border = '1px solid black';
container.style.maxHeight = '50vh';
container.style.overflow = 'auto';
document.body.appendChild(container);
results.violations.forEach(v => {
const rule = document.createElement('div');
rule.innerHTML = `<strong>${v.id} (${v.impact})</strong>: ${v.help}`;
container.appendChild(rule);
v.nodes.forEach(node => {
const element = document.createElement('div');
element.textContent = node.html;
element.style.marginLeft = '10px';
container.appendChild(element);
});
});
Такой подход позволяет визуально видеть нарушенные элементы прямо на странице, связывая правило с конкретным DOM-узлом.
Для более сложной визуализации применяются плагины и утилиты:
Пример генерации HTML-отчёта:
import { writeFileSync } from 'fs';
import { htmlReporter } from 'axe-html-reporter';
const html = htmlReporter(results);
writeFileSync('axe-report.html', html);
Можно добавить подсветку проблемных элементов с помощью CSS классов:
results.violations.forEach(v => {
v.nodes.forEach(node => {
const el = document.querySelector(node.target.join(','));
if (el) el.style.outline = '2px solid red';
});
});
Каждое нарушение визуально выделяется, что упрощает локализацию проблемы.
Для удобной визуализации результаты можно фильтровать по:
impact)id)tags)Пример фильтрации:
const criticalViolations = results.violations.filter(v => v.impact === 'critical');
Далее можно визуализировать только эти элементы, чтобы концентрироваться на самых серьёзных проблемах.
Для автоматизированных проверок доступности результаты
axe-core можно экспортировать в JSON и использовать в CI/CD
пайплайнах:
import fs from 'fs';
fs.writeFileSync('axe-results.json', JSON.stringify(results, null, 2));
Скрипты проверки могут анализировать JSON, формировать отчёты или блокировать релизы при критических нарушениях.
Собранные результаты можно преобразовывать в графики с использованием библиотек вроде Chart.js или D3.js:
id)Такое представление позволяет быстро оценивать распределение проблем и приоритеты их исправления.