Axe-core — это библиотека JavaScript для автоматизированного тестирования доступности веб-приложений. Она позволяет обнаруживать ошибки, нарушающие стандарты доступности, включая требования Section 508, которые регулируют использование технологий для людей с ограниченными возможностями в США. Основным подходом является программная проверка DOM-структуры страницы и выявление элементов, которые могут создавать барьеры для пользователей.
Для начала работы требуется подключение библиотеки. В браузере это можно сделать через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.6.3/axe.min.js"></script>
Или через npm для Node.js-проектов:
npm install axe-core
После подключения библиотека предоставляет метод
axe.run, который запускает аудит доступности на указанной
части DOM или на всей странице.
axe.run(document, {}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
Ключевые моменты работы с результатами:
violations — массив объектов с описанием нарушений, их
уровнем серьезности и ссылками на рекомендации.incomplete — элементы, для которых автоматическая
проверка не может дать однозначный результат.passes — элементы, которые соответствуют проверкам
доступности.Каждое нарушение содержит следующие важные поля:
id — уникальный идентификатор правила (например,
color-contrast или label).impact — уровень воздействия: minor,
moderate, serious, critical.description — краткое пояснение правила.nodes — список узлов DOM, где найдено нарушение, с
конкретными атрибутами и HTML-кодом.Section 508 предъявляет конкретные требования к доступности, включая:
alt).Для проверки соответствия этим требованиям в Axe-core можно
использовать набор правил, которые включают
wcag2a, wcag2aa и специфические конфигурации
для Section 508. Пример конфигурации:
const config = {
runOnly: {
type: 'tag',
values: ['section508', 'wcag2aa']
},
rules: {
'color-contrast': { enabled: true },
'label': { enabled: true },
'image-alt': { enabled: true }
}
};
axe.run(document, config).then(results => {
console.log(results.violations);
});
В конфигурации можно включать или отключать отдельные правила, что позволяет создавать кастомные проверки под конкретные проекты и требования Section 508.
Axe-core легко интегрируется с популярными фреймворками тестирования:
import { configureAxe, toHaveNoViolations } from 'jest-axe';
expect.extend(toHaveNoViolations);
test('страница соответствует Section 508', async () => {
const results = await configureAxe()(document.body);
expect(results).toHaveNoViolations();
});
import 'cypress-axe';
cy.visit('/page');
cy.injectAxe();
cy.checkA11y(null, { includedImpacts: ['critical', 'serious'] });
В обоих случаях библиотека позволяет автоматически проверять страницы в процессе CI/CD, фиксируя нарушения доступности на раннем этапе разработки.
Axe-core поддерживает создание собственных правил, если стандартные проверки Section 508 не охватывают специфические требования проекта. Пример регистрации нового правила:
axe.registerRule({
id: 'custom-heading-check',
selector: 'h1, h2, h3',
any: ['text-alignment'],
evaluate: node => ({
passed: node.textContent.trim().length > 0
}),
description: 'Все заголовки должны содержать текст'
});
После регистрации правило участвует в любом запуске
axe.run и учитывается в отчете о нарушениях.
Для улучшения восприятия отчетов можно использовать:
Пример генерации HTML-отчета:
import fs from 'fs';
import axe from 'axe-core';
axe.run(document).then(results => {
const htmlReport = axe.reporter(results, 'html');
fs.writeFileSync('axe-report.html', htmlReport);
});
critical и
serious.Эти подходы позволяют обеспечить стабильное соответствие веб-приложения требованиям Section 508 и поддерживать высокий уровень доступности.