Библиотека Axe-core предназначена для
автоматического выявления проблем доступности веб-приложений.
Центральным объектом при выполнении проверок является массив
violations, который содержит сведения о
всех обнаруженных нарушениях стандартов доступности.
Массив violations формируется после вызова метода
axe.run(), который сканирует DOM страницы
и возвращает объект с несколькими ключами:
violations — массив объектов с информацией о найденных
нарушениях.incomplete — массив объектов, где результаты проверки
не являются окончательными (например, из-за динамического
контента).passes — массив объектов, которые прошли проверку без
нарушений.inapplicable — проверки, которые не применяются к
текущему DOM.Каждый элемент массива violations имеет строго
определённую структуру:
{
id: "color-contrast",
impact: "serious",
description: "Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds",
help: "Elements must have sufficient color contrast",
helpUrl: "https://dequeuniversity.com/rules/axe/4.8/color-contrast?application=axeAPI",
nodes: [
{
html: "<p style='color:#777;'>Some text</p>",
target: ["body > div > p:nth-child(1)"],
failureSummary: "This element has insufficient color contrast of 2.5:1",
any: [...],
all: [...],
none: [...]
}
]
}
Ключевые поля:
id — уникальный идентификатор правила проверки.impact — степень влияния нарушения (minor,
moderate, serious,
critical).description — подробное описание проблемы.help — краткая рекомендация по исправлению.helpUrl — ссылка на документацию или руководство.nodes — массив элементов DOM, которые нарушают
правило.Каждый элемент nodes содержит:
html — строка с HTML-кодом элемента, вызвавшего
нарушение.target — CSS-селектор или путь к элементу в DOM.failureSummary — текстовое описание конкретного
нарушения для этого элемента.any, all, none — массивы
результатов проверки подусловий правила. Они дают детальную информацию о
том, какие именно условия правила не выполнены.Обработка violations обычно выполняется с использованием итераций по массиву и его подструктурам. Пример получения всех HTML-элементов с нарушениями:
axe.run(document).then(results => {
results.violations.forEach(v => {
console.log(`Нарушение: ${v.id}, уровень: ${v.impact}`);
v.nodes.forEach(node => {
console.log(`Элемент: ${node.html}`);
console.log(`Путь в DOM: ${node.target.join(", ")}`);
console.log(`Описание: ${node.failureSummary}`);
});
});
});
Это позволяет получить полное представление о проблемах доступности и их локализации в коде.
Axe-core использует поле impact для
ранжирования нарушений по степени критичности:
Эта классификация полезна при автоматическом формировании отчетов и приоритизации исправлений.
nodesПоле nodes предоставляет детальную информацию о каждом
элементе, вызвавшем нарушение:
html помогает идентифицировать
проблемный элемент без необходимости поиска в DOM.target позволяет привязать нарушение к
конкретному селектору CSS, что удобно для автоматизации
исправлений.failureSummary содержит готовый текст
для отчёта или логирования.any, all,
none дают возможность понять, какие подусловия
правила были соблюдены или нарушены, что особенно важно для сложных
правил WCAG.На основе массива violations создаются отчёты для команд
разработки и QA. Обычно формируют таблицы или JSON-структуры,
включающие:
id, impact).helpUrl).target).failureSummary).Пример фильтрации критических и серьёзных нарушений для отчёта:
const criticalViolations = results.violations.filter(v =>
v.impact === 'critical' || v.impact === 'serious'
);
Это позволяет концентрироваться на элементах, которые требуют немедленного исправления.
Использование массива violations в автоматизированных
тестах позволяет:
Пример интеграции с Jest:
test('Страница должна быть доступной', async () => {
const results = await axe.run(document.body);
expect(results.violations.length).toBe(0);
});
Если violations содержит хотя бы один элемент, тест
будет провален, что обеспечивает контроль качества доступности на уровне
CI/CD.
Массив violations является центральным
инструментом анализа доступности:
Глубокий разбор структуры и полей каждого violation
обеспечивает точную локализацию проблем и эффективное исправление кода
без лишних догадок.