Библиотека Axe-core — это инструмент для
автоматизированного тестирования доступности веб-приложений. Для работы
с ней в JavaScript проекте используется пакет axe-core,
который устанавливается через npm:
npm install axe-core
После установки библиотеку можно подключить как через
require, так и через import:
const axe = require('axe-core');
// или
import axe from 'axe-core';
Для интеграции с браузером часто используется подключение скрипта напрямую:
<script src="node_modules/axe-core/axe.min.js"></script>
Основная функция библиотеки — анализ DOM на предмет нарушений доступности. Стандартный сценарий включает:
Пример базового использования:
axe.run(document, {}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
document — объект DOM, на котором
проводится проверка.results.violations — массив с
обнаруженными нарушениями.Axe-core поддерживает несколько форматов отчетов:
Для генерации CSV отчета используется отдельный модуль или кастомная функция конвертации JSON в CSV. Каждое нарушение включает следующие поля:
id — уникальный идентификатор правила.impact — уровень влияния (critical,
serious, moderate, minor).description — описание правила.help — рекомендации по исправлению.nodes — список элементов DOM, где выявлено
нарушение.html — фрагмент HTML с проблемным элементом.CSV Reporter — это компонент, преобразующий результаты Axe-core в CSV-формат для дальнейшей аналитики. Обычно он используется для:
violations, passes,
incomplete, inapplicable.violations), исключая пройденные проверки.fs или через браузерные функции
сохранения файлов.Пример функции конвертации:
function convertViolationsToCSV(violations) {
const headers = ['id', 'impact', 'description', 'help', 'html'];
const rows = violations.map(v => {
const nodesHtml = v.nodes.map(n => n.html).join('; ');
return [
v.id,
v.impact,
v.description.replace(/[\n\r]/g, ' '),
v.help.replace(/[\n\r]/g, ' '),
nodesHtml.replace(/[\n\r]/g, ' ')
].map(field => `"${field}"`).join(',');
});
return [headers.join(','), ...rows].join('\n');
}
Сохранение CSV в файл:
const fs = require('fs');
axe.run(document, {}, (err, results) => {
if (err) throw err;
const csvContent = convertViolationsToCSV(results.violations);
fs.writeFileSync('axe-report.csv', csvContent);
});
CSV Reporter удобен для систем автоматического тестирования:
Пример скрипта для CI:
{
"scripts": {
"axe-ci": "node axe-csv.js"
}
}
Где axe-csv.js содержит полный цикл: запуск Axe,
генерация CSV, сохранение файла.
critical и serious нарушения.Пример фильтрации:
const criticalViolations = results.violations.filter(v => v.impact === 'critical');
const csvCritical = convertViolationsToCSV(criticalViolations);
Для SPA (Single Page Application) рекомендуется:
const container = document.querySelector('#app');
axe.run(container, {}, (err, results) => {
if (err) throw err;
const csv = convertViolationsToCSV(results.violations);
console.log(csv);
});
Для крупных приложений рекомендуется:
Такой подход позволяет поддерживать отчеты актуальными и легко интегрировать их в процессы тестирования и улучшения доступности.