Библиотека Axe-core предназначена для автоматизированного тестирования доступности веб-страниц. Она предоставляет функционал для анализа DOM и выявления нарушений стандартов доступности (WCAG). Все операции Axe-core, связанные с запуском анализа, возвращают промисы, что обеспечивает асинхронное выполнение и удобное взаимодействие с другими частями приложения.
runГлавный метод для запуска аудита — axe.run. Он принимает
два основных параметра: объект контейнера и
опции конфигурации. Возвращаемое значение — промис,
который разрешается с объектом результатов.
axe.run(document, { runOnly: ['wcag2a', 'wcag2aa'] })
.then(results => {
console.log(results.violations);
})
.catch(err => {
console.error(err);
});
Ключевые моменты:
axe.run никогда не блокирует поток выполнения.violations, incomplete и
passes..catch.Результат промиса — объект с несколькими массивами:
violations — массив объектов с нарушениями стандартов доступности. Каждый объект содержит:
id — уникальный идентификатор правила;impact — уровень воздействия (critical,
serious, moderate, minor);nodes — массив DOM-элементов, нарушающих правило;description — текстовое описание проблемы.passes — элементы, прошедшие проверку;
incomplete — проверки, которые не были завершены (например, динамический контент);
inapplicable — правила, которые не применимы к текущей странице.
async/awaitДля удобного управления асинхронными операциями промисы можно
использовать с async/await:
async function runAxe() {
try {
const results = await axe.run(document, { runOnly: ['wcag2a'] });
console.log('Нарушения:', results.violations);
} catch (err) {
console.error('Ошибка выполнения Axe:', err);
}
}
Преимущества:
.then и
.catch.Метод axe.run поддерживает гибкую настройку:
violations.v2,
v3, json, html). Результат
промиса всегда совместим с выбранным форматом.const options = {
runOnly: { type: 'tag', values: ['wcag2aa'] },
rules: {
'color-contrast': { enabled: false }
}
};
axe.run(document.body, options)
.then(results => console.log(results))
.catch(console.error);
При необходимости анализа нескольких страниц или элементов часто используют Promise.all:
const elements = [document.querySelector('#header'), document.querySelector('#footer')];
Promise.all(elements.map(el => axe.run(el)))
.then(resultsArray => {
resultsArray.forEach((res, index) => {
console.log(`Элемент ${index}:`, res.violations);
});
})
.catch(err => console.error(err));
axe.run создаёт отдельный промис.Promise.all отклоняется, если хотя бы один промис
завершился с ошибкой.Promise.allSettled.В средах Jest, Mocha или Cypress промисы позволяют интегрировать Axe-core в цепочку тестов:
it('Проверка доступности', async () => {
const results = await axe.run(document);
expect(results.violations.length).toBe(0);
});
Некорректный DOM, динамически загружаемый контент или сторонние скрипты могут вызвать отклонение промиса. Рекомендуется:
try/catch или .catch.axe.run.MutationObserver.Понимание механизма возвращаемых промисов является ключевым для правильного и эффективного применения Axe-core. Промисы обеспечивают асинхронность, гибкость в обработке результатов и позволяют интегрировать проверку доступности в любые сценарии автоматизированного тестирования.