Библиотека axe-core является мощным инструментом для автоматизированного тестирования доступности веб-приложений. Для интеграции в сложные проекты и оптимизации тестов часто требуется настройка поведения библиотеки под конкретное окружение — будь то браузер, Node.js или специфическая тестовая среда.
axe.configure()Метод axe.configure() позволяет определить глобальные
правила поведения библиотеки. В параметрах конфигурации можно
указать:
axe.configure({
rules: [
{ id: 'color-contrast', enabled: true },
{ id: 'label', enabled: false }
]
});
checks – более низкоуровневая настройка проверки элементов DOM, полезная при интеграции с кастомными компонентами, которые могут использовать нестандартные атрибуты.
reporter – определяет способ вывода результатов (например, в консоль, JSON или в сторонние системы логирования).
При использовании axe-core в браузере важны следующие аспекты:
axe.run()
рекомендуется оборачивать в промис:import axe from 'axe-core';
document.addEventListener('DOMContentLoaded', async () => {
const results = await axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
}
});
console.log(results.violations);
});
include и
exclude можно определить конкретные области страницы для
проверки, что ускоряет тестирование и исключает динамический контент,
например, рекламные блоки:axe.run({
include: [['#main-content']],
exclude: [['.ad-banner']]
});
Для серверной автоматизации тестирования axe-core предоставляет возможность использовать jsdom или Puppeteer:
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const axe = require('axe-core');
const dom = new JSDOM('<!DOCTYPE html><html><body><button>Click</button></body></html>');
const results = axe.run(dom.window.document);
const puppeteer = require('puppeteer');
const axeCore = require('axe-core');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://localhost:3000');
await page.addScriptTag({ path: require.resolve('axe-core') });
const results = await page.evaluate(async () => {
return await axe.run({
runOnly: {
type: 'tag',
values: ['wcag2aa']
}
});
});
console.log(results.violations);
await browser.close();
})();
Для разных окружений можно определить отдельные профили правил. Например, для development-сервера включить все проверки, а для production — только критичные:
const environment = process.env.NODE_ENV;
const config = {
rules: environment === 'production'
? [{ id: 'color-contrast', enabled: true }]
: [{ id: 'color-contrast', enabled: true }, { id: 'label', enabled: true }]
};
axe.configure(config);
Такой подход позволяет минимизировать нагрузку на тесты и концентрироваться на реальных проблемах доступности в продакшене.
В axe-core доступна настройка локализации через объект
locale при конфигурации. Это важно для многоязычных
проектов, где результаты тестирования должны отображаться на языке
целевой аудитории:
axe.configure({
locale: {
'color-contrast': {
description: 'Контраст текста и фона недостаточен',
help: 'Увеличить контраст текста на странице'
}
}
});
Окружение CI/CD требует минимизации интерактивных действий. axe-core позволяет экспортировать результаты в формате JSON для последующего анализа или отчётности:
axe.run(document).then(results => {
const fs = require('fs');
fs.writeFileSync('axe-results.json', JSON.stringify(results, null, 2));
});
Комбинация профилей правил, фильтрации элементов и форматов вывода обеспечивает гибкое управление тестами доступности под конкретное окружение.
Для удобного разделения правил по критичности применяются
теги (tags). Это позволяет запускать
только нужные проверки в разных окружениях:
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
}
});
wcag2a — минимальный уровень соответствия стандартам
WCAG.wcag2aa — расширенный уровень, критичный для
большинства приложений.В сложных проектах нередко требуется добавить собственные проверки.
axe-core поддерживает регистрацию кастомных правил через
axe.registerRule():
axe.registerRule({
id: 'custom-button-label',
selector: 'button',
evaluate: node => node.textContent.trim() !== '',
enabled: true
});
Эти правила автоматически учитываются в глобальной конфигурации и могут быть активированы только в определённых окружениях.
Этот набор инструментов и методов позволяет строить гибкую, масштабируемую архитектуру тестирования доступности, адаптированную под особенности конкретного окружения и стадии разработки приложения.