Библиотека Axe-core — мощный инструмент для автоматизированной проверки доступности веб-приложений. Она позволяет выявлять нарушения стандартов WCAG (Web Content Accessibility Guidelines) и предоставляет подробную информацию о каждом найденном инциденте. Одной из ключевых возможностей является управление уровнями серьёзности (impact levels), что позволяет адаптировать отчёты под нужды проекта.
В Axe-core каждый найденный дефект классифицируется по уровню серьёзности. Основные категории:
Каждый уровень серьёзности может использоваться для фильтрации результатов тестирования, чтобы сосредоточиться на исправлении наиболее критичных проблем.
Axe-core позволяет настраивать фильтрацию результатов по impact при запуске сканирования. Например, при интеграции в тесты на Jest или Cypress можно исключить minor и moderate ошибки, сосредоточившись на serious и critical:
import axe from 'axe-core';
const options = {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
},
resultTypes: ['violations'],
// Фильтрация по уровню серьёзности
includedImpacts: ['critical', 'serious']
};
axe.run(document, options).then(results => {
console.log(results.violations);
});
Здесь ключевое поле includedImpacts задаёт массив уровней, которые будут отображены в отчёте. Это облегчает приоритизацию исправлений и позволяет интегрировать сканирование в CI/CD без перегрузки разработчиков незначительными предупреждениями.
Результаты сканирования Axe-core содержат подробную информацию:
id — уникальный идентификатор правила.impact — уровень серьёзности.description — текстовое описание проблемы.help и helpUrl — ссылки на рекомендации по
исправлению.nodes — массив элементов DOM, где была обнаружена
проблема.Для организации работы с дефектами удобно создавать динамические фильтры по impact:
function filterByImpact(violations, impacts) {
return violations.filter(v => impacts.includes(v.impact));
}
const criticalViolations = filterByImpact(results.violations, ['critical']);
Такой подход позволяет формировать отдельные отчёты для команд разработчиков и дизайнеров, распределяя исправление по приоритету.
Axe-core допускает переопределение уровня серьёзности для отдельных правил через конфигурацию. Это особенно важно для проектов с уникальными требованиями доступности:
axe.configure({
rules: [
{
id: 'color-contrast',
impact: 'serious'
},
{
id: 'image-alt',
impact: 'critical'
}
]
});
Переопределение impact позволяет адаптировать стандартные правила под реальные потребности проекта, повышая эффективность тестирования.
В рамках CI/CD важно интегрировать фильтрацию по серьёзности на уровне скриптов:
const { violations } = await axe.run(document, { includedImpacts: ['critical', 'serious'] });
if (violations.length > 0) {
console.error('Обнаружены критические и серьёзные нарушения доступности:', violations);
process.exit(1);
}
Такая проверка автоматически блокирует публикацию изменений при наличии дефектов высокой серьёзности, минимизируя риск выпуска недоступного функционала.
Для больших проектов полезно группировать дефекты по impact и визуализировать их:
const summary = results.violations.reduce((acc, v) => {
acc[v.impact] = (acc[v.impact] || 0) + 1;
return acc;
}, {});
console.table(summary);
Это даёт быстрое понимание распределения проблем и помогает планировать работу над исправлениями по приоритету, облегчая управление доступностью на уровне продукта.
critical и serious, чтобы фокусироваться на
действительно значимых проблемах.Moderate и minor можно отслеживать
периодически для постепенного улучшения UX.Эффективное управление уровнями серьёзности в Axe-core повышает точность отчётов, ускоряет исправление критических дефектов и делает процесс тестирования доступности более управляемым и наглядным.