Библиотека Axe-core предназначена для автоматизации проверки доступности веб-контента (a11y) и предоставляет детализированные отчёты о найденных проблемах. Важным аспектом работы с ней является понимание структуры возвращаемых значений, которые позволяют эффективно интегрировать инструмент в тестовые сценарии и автоматизированные пайплайны.
Возвращаемые значения в Axe-core представляют собой объекты
JavaScript, содержащие информацию о результатах анализа.
Основной метод, который используется для запуска проверки — это
axe.run(). Этот метод возвращает Promise,
который при выполнении предоставляет объект с результатами анализа.
axe.run(document).then(results => {
console.log(results);
});
Объект, возвращаемый axe.run(), состоит из нескольких
ключевых свойств:
violations – массив объектов, каждый
из которых описывает конкретное нарушение правил доступности.passes – массив объектов с успешными
проверками.incomplete – массив правил, которые не
удалось полностью проверить.inapplicable – массив правил, которые
не применимы к текущему документу.violationКаждый элемент массива violations содержит следующие
поля:
id – уникальный идентификатор правила (например,
color-contrast).impact – уровень влияния нарушения: minor,
moderate, serious, critical.description – текстовое описание нарушения.help – краткая подсказка по исправлению.helpUrl – ссылка на официальную документацию по
конкретному правилу.nodes – массив объектов, представляющих DOM-элементы,
где обнаружено нарушение.{
id: "color-contrast",
impact: "serious",
description: "Контраст текста и фона недостаточен",
help: "Увеличить контраст текста и фона",
helpUrl: "https://dequeuniversity.com/rules/axe/4.4/color-contrast",
nodes: [
{
html: "<button style='color: #ccc; background-color: #fff'>Click me</button>",
target: ["button"],
failureSummary: "Контраст ниже рекомендуемого уровня 4.5:1"
}
]
}
Для анализа результатов необходимо правильно обходить массивы
объектов. Наиболее распространённый подход — фильтрация по
impact или id правила:
results.violations
.filter(v => v.impact === "critical")
.forEach(v => {
console.log(v.id, v.help);
});
Использование поля nodes позволяет точно
идентифицировать проблемные элементы и получать их HTML-код или
CSS-селекторы для последующей автоматизации исправлений.
incomplete и inapplicableincomplete включает правила, для
которых Axe не смог полностью определить результат, часто из-за
ограничений DOM или динамического контента. Поле nodes
также присутствует, но может быть пустым.inapplicable показывает правила,
которые не применимы к текущей структуре страницы. Это важно для
корректного подсчёта процента покрытия тестов.axe.run() всегда возвращает Promise, что требует
использования async/await или .then():
async function testAccessibility() {
try {
const results = await axe.run(document);
console.log(results.violations.length + " нарушений найдено");
} catch (error) {
console.error("Ошибка при запуске Axe-core:", error);
}
}
Возможные ошибки могут быть связаны с отсутствием DOM-элементов, неправильной инициализацией библиотеки или проблемами в конфигурации правил.
Axe-core позволяет ограничивать проверку конкретными правилами и элементами, что влияет на возвращаемый объект:
const options = {
runOnly: {
type: "rule",
values: ["color-contrast", "label"]
},
elements: document.querySelectorAll("form, button")
};
const results = await axe.run(document, options);
В результате объект будет содержать только выбранные правила и элементы, что облегчает интеграцию в CI/CD и сокращает объём данных для анализа.
violations, passes, incomplete,
inapplicable.nodes внутри violations позволяют получить
точное местоположение нарушений в DOM.impact и id помогают фильтровать и
приоритизировать исправления.axe.run() требует корректной работы
с промисами и обработкой ошибок.runOnly и elements позволяет
ограничить возвращаемые данные для оптимизации анализа.Понимание структуры и особенностей возвращаемых значений Axe-core является основой для построения надёжных инструментов проверки доступности и интеграции их в автоматизированные тестовые процессы.