Библиотека Axe-core является мощным инструментом для автоматизированного анализа доступности веб-приложений. Одним из ключевых аспектов её работы является детальный разбор DOM-нод и получение информации о них для проведения проверок.
Каждая нода в Axe-core представлена объектом с набором стандартных свойств:
node: ссылка на сам DOM-элемент. Это может быть любой
HTML-элемент, на который производится проверка.html: строковое представление элемента, включая его
атрибуты.target: массив CSS-селекторов, который позволяет точно
определить путь к элементу в DOM.any, all, none: массивы
результатов правил проверки доступности, применённых к ноде. Они
содержат объекты с информацией о нарушении, предупреждении или успешной
проверке.Пример структуры объекта ноды:
{
node: HTMLButtonElement,
html: "<button type='submit'>Отправить</button>",
target: ["#form > button"],
any: [...],
all: [...],
none: [...]
}
Axe-core предоставляет метод axe.run(), который
возвращает результат в виде объекта с массивом нод, затронутых
найденными проблемами. Для работы с отдельной нодой можно использовать
следующие подходы:
import axe from 'axe-core';
axe.run(document).then(results => {
results.violations.forEach(violation => {
violation.nodes.forEach(node => {
console.log(node.html); // HTML код элемента
console.log(node.target); // CSS путь к элементу
});
});
});
Ключевой момент: свойства any,
all, none позволяют детально анализировать,
какие правила были нарушены и какие успешно пройдены. any
отражает правила, которые сработали хотя бы один раз, all —
правила, которые должны выполняться полностью, none —
правила, которые не должны применяться к данной ноде.
Каждая нода содержит информацию о атрибутах ARIA, ролях и других свойствах:
role: вычисляемая ARIA-роль элемента, если она
присутствует.htmlAttributes: объект с ключами-значениями всех
атрибутов элемента.accessibleName: строка, содержащая вычисленное имя для
скринридеров.accessibleDescription: описание, используемое для
озвучивания вспомогательными технологиями.Пример:
{
role: "button",
htmlAttributes: { type: "submit", id: "sendBtn" },
accessibleName: "Отправить",
accessibleDescription: "Отправляет форму на сервер"
}
target — массив строк, каждая из которых представляет
CSS-селектор, уникально идентифицирующий элемент в DOM. Это
позволяет:
Для комплексных компонентов Axe-core сохраняет цепочку
родительских элементов, чтобы понять контекст. В
объекте ноды это отражается через вложенные структуры
ancestor или через пути в target. Это важно
для правил, зависящих от вложенности элементов, например
label для input или table для
th/td.
Для анализа интерактивных элементов важно знать их состояние:
disabled: флаг, указывающий на блокировку
элемента.hidden: скрыт ли элемент визуально или через атрибуты
aria-hidden.focusable: может ли элемент получать фокус.Пример проверки состояния:
if (!node.hidden && node.focusable) {
// Элемент видим и доступен для взаимодействия
}
Некоторые ноды могут содержать расширенные данные для диагностики:
failureSummary: текстовое описание нарушений
доступности.htmlSnapshot: фрагмент HTML, полезный для отладки.impact: уровень важности нарушения
(critical, serious, moderate,
minor).Использование этих свойств позволяет интегрировать Axe-core в CI/CD, тесты компонентов и отчётность по доступности.
Для больших страниц рекомендуется:
impact).target для точного сопоставления с тестами
UI.Это ускоряет анализ и упрощает интерпретацию результатов.
Эта структура данных о нодах обеспечивает гибкость и точность при работе с библиотекой Axe-core, делая возможным детальный аудит доступности веб-приложений и интеграцию с автоматизированными тестами на всех этапах разработки.