Библиотека Axe-core предоставляет мощный набор инструментов для автоматизированного тестирования доступности веб-приложений. Одним из ключевых механизмов оптимизации проверки является ограничение области сканирования. Это позволяет сосредоточиться на конкретных элементах DOM, ускорить тестирование и снизить вероятность ложных срабатываний.
contextМетод axe.run() принимает в качестве первого аргумента
параметр context, который определяет, какие элементы
будут проверяться:
const axe = require('axe-core');
axe.run(document.querySelector('#main-content'))
.then(results => console.log(results.violations));
Ключевые моменты:
'#main-content', '.article'), чтобы проверить
только определённый участок страницы.document.querySelector(...)) позволяет точнее
контролировать область проверки.Для более тонкой настройки можно использовать параметр
runOnly, который позволяет запускать
определённые правила или категории правил:
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
}
}).then(results => console.log(results.violations));
Особенности:
type: 'rule' – запуск конкретных правил по их
идентификаторам.type: 'tag' – запуск правил по тегам WCAG, Best
Practices или ARIA.context для проверки только части
страницы по выбранным критериям.excludeДля исключения определённых элементов из проверки используется
параметр exclude. Это особенно полезно для
областей с динамическим контентом или сторонними виджетами:
axe.run(document, {
exclude: [['.ads', '#newsletter-popup']]
});
Примечания:
exclude принимает массив массивов селекторов; каждый
вложенный массив определяет отдельную группу исключений.context, элементы из
exclude будут полностью игнорироваться.Иногда необходимо ограничить уровень вложенности
элементов для проверки. Axe-core предоставляет опцию
includedImpacts и elementRef, но более гибкое
ограничение достигается через селекторы CSS с псевдоклассами и
комбинацию context и exclude:
axe.run(document.querySelector('#main-content > .section'))
.then(results => console.log(results.violations));
> ограничивает проверку только прямыми
потомками..section:not(.hidden) позволяет
игнорировать скрытые элементы.Ограничение области проверки значительно ускоряет выполнение axe.run(), особенно на страницах с большим DOM:
iframe, рекламные блоки)
минимизирует шум в результатах.axe.run(document, {
runOnly: { type: 'tag', values: ['wcag2aa'] },
context: '#main-content',
exclude: [['.ads', '#popup']],
reporter: 'v2'
}).then(results => {
results.violations.forEach(v => {
console.log(`${v.id} — ${v.description}`);
});
});
reporter: 'v2' задаёт формат вывода.iframeAxe-core автоматически проверяет содержимое iframe, но
иногда требуется ограничение:
const iframe = document.querySelector('#embedded-frame');
axe.run(iframe.contentDocument.body)
.then(results => console.log(results.violations));
iframe требует передачи body
документа.context и exclude
внутри документа iframe.Правильное ограничение области проверки в Axe-core обеспечивает:
Эти механизмы формируют основу для точного и эффективного тестирования доступности в JavaScript-проектах.