Библиотека Axe-core предназначена для автоматизированного тестирования доступности веб-приложений. Она анализирует DOM страницы, выявляет нарушения стандартов WCAG (Web Content Accessibility Guidelines) и предоставляет структурированные данные о найденных проблемах.
Для использования Axe-core в JavaScript необходимо подключить библиотеку через пакетный менеджер npm:
npm install axe-core
Или добавить скрипт напрямую на страницу:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.7.2/axe.min.js"></script>
После подключения библиотеки доступен глобальный объект
axe, через который осуществляется настройка и запуск
проверок.
Для запуска анализа используется метод axe.run. Он
принимает два аргумента:
document.Пример базового запуска:
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
}
}).then(results => {
console.log(results);
}).catch(err => {
console.error(err);
});
Ключевой момент: results содержит
полную структуру данных о нарушениях доступности, включая подробные
сведения о каждом элементе, где обнаружена проблема.
Объект results включает несколько важных полей:
violations — массив нарушений, где
каждый объект содержит:
id — уникальный идентификатор правила;impact — уровень воздействия (minor,
moderate, serious,
critical);description — описание проблемы;help — рекомендации по исправлению;nodes — массив элементов DOM, где обнаружено нарушение,
с детальной информацией о каждом узле (например, HTML-код элемента,
селектор, текстовое содержимое).passes — элементы, которые успешно
прошли проверку.
incomplete — элементы, для которых
проверка не была полностью проведена.
inapplicable — правила, которые не
применяются к текущей структуре страницы.
Пример обработки результатов:
axe.run(document).then(results => {
results.violations.forEach(v => {
console.log(`Правило: ${v.id} (${v.impact})`);
console.log(`Описание: ${v.description}`);
v.nodes.forEach(node => {
console.log(`Элемент: ${node.html}`);
});
});
});
Axe-core позволяет гибко настраивать анализ. Основные возможности:
Включение и отключение правил:
axe.run(document, {
rules: {
'color-contrast': { enabled: false },
'image-alt': { enabled: true }
}
});Фильтрация по тегам: Теги группируют правила по WCAG, уровню критичности или типу проверки.
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2aa', 'best-practice']
}
});Контроль области проверки: Проверка может ограничиваться конкретным элементом DOM или селектором.
const mainContent = document.querySelector('#main');
axe.run(mainContent);Каждое сообщение о нарушении содержит структурированную информацию, которая позволяет не только увидеть проблему, но и понять контекст:
target — CSS-селектор элемента;html — исходный код узла;failureSummary — краткое описание
ошибки;any, all,
none — группы тестов, которые проверяются в рамках
правила, где указано, какие конкретно подправила были нарушены.Пример вывода для одного элемента:
{
"id": "image-alt",
"impact": "serious",
"description": "Изображение должно иметь альтернативный текст",
"help": "Добавьте атрибут alt",
"nodes": [
{
"html": "<img src='photo.jpg'>",
"target": ["img"],
"failureSummary": "Элемент img не имеет атрибута alt"
}
]
}
Эта структура позволяет интегрировать Axe-core с системами автоматизированного тестирования, строить отчёты и направлять задачи на исправление конкретных элементов.
Axe-core легко подключается к популярным инструментам для тестирования интерфейсов:
cypress-axe для
интеграции с E2E тестами.axe-core/playwright для автоматической генерации
отчётов.Пример использования с Jest:
const axe = require('axe-core');
const { JSDOM } = require('jsdom');
test('проверка доступности страницы', async () => {
const dom = new JSDOM(`<body><img src="logo.png"></body>`);
const results = await axe.run(dom.window.document);
expect(results.violations.length).toBe(0);
});
Для удобства анализа можно формировать отчёты в формате JSON или HTML. Стандартная структура позволяет интегрировать их с CI/CD, строить графики нарушений и формировать уведомления для команды разработки.
Пример экспорта в JSON:
axe.run(document).then(results => {
const fs = require('fs');
fs.writeFileSync('axe-report.json', JSON.stringify(results, null, 2));
});
Для HTML-отчётов можно использовать сторонние библиотеки, которые
преобразуют массив violations в визуальный формат с
подсветкой проблемных элементов.
runOnly и rules для ускорения
анализа больших приложений.nodes и
подправила (any, all, none) для
точного исправления ошибок.Структурированность сообщений Axe-core делает библиотеку мощным инструментом для поддержания и улучшения доступности веб-приложений на всех этапах разработки.