Для начала работы с библиотекой axe-core необходимо установить её через npm или yarn:
npm install axe-core --save-dev
или
yarn add axe-core --dev
axe-core — это низкоуровневая библиотека для проверки доступности веб-страниц по стандартам WCAG 2.1. Она предоставляет API для запуска аудитов как в браузере, так и в Node.js окружении.
После установки библиотека может быть подключена через ES-модули:
import axe from 'axe-core';
или через CommonJS:
const axe = require('axe-core');
axe-core работает с контекстом и правилами. Контекст определяет область DOM, в которой выполняется аудит. Правила определяют, какие проверки будут применяться.
Пример базового использования:
axe.run(document, { runOnly: ['wcag2aa'] }, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
document — контекст, где будут проверяться
элементы.runOnly — массив правил или категорий, например
'wcag2aa', 'section508'.results.violations — список найденных нарушений с
указанием элементов, описания и рекомендаций.В axe-core можно отключать отдельные правила или изменять их конфигурацию. Это полезно при интеграции в CI/CD, чтобы избежать ложноположительных срабатываний на динамические элементы.
const options = {
rules: {
'color-contrast': { enabled: false },
'label': { enabled: true }
}
};
axe.run(document, options, (err, results) => {
console.log(results.violations);
});
Для автоматизированного тестирования можно использовать axe-core совместно с Jest:
import { configureAxe, toHaveNoViolations } from 'jest-axe';
import { render } from '@testing-library/react';
expect.extend(toHaveNoViolations);
test('Компонент должен быть доступен', async () => {
const { container } = render(<MyComponent />);
const axe = configureAxe();
const results = await axe(container);
expect(results).toHaveNoViolations();
});
Здесь:
jest-axe оборачивает axe-core в
удобные методы для Jest.configureAxe() позволяет задать глобальные
настройки.toHaveNoViolations упрощает утверждения в тестах.Для проверки доступности на стадии сборки и деплоя axe-core можно запускать в скриптах CI/CD. Пример для GitHub Actions:
name: Accessibility Audit
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
axe-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Установка Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Установка зависимостей
run: npm ci
- name: Запуск axe-core
run: node scripts/axe-audit.js
В scripts/axe-audit.js можно реализовать аудит всех
страниц приложения через Puppeteer или Playwright:
import puppeteer from 'puppeteer';
import axeCore from 'axe-core';
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://localhost:3000');
const results = await page.evaluate(() => {
return axe.run();
});
console.log(results.violations);
if (results.violations.length > 0) process.exit(1);
await browser.close();
})();
puppeteer.launch() открывает браузер без
интерфейса.page.evaluate() выполняет аудит непосредственно в DOM
страницы.process.exit(1) прерывает CI pipeline при найденных
нарушениях, обеспечивая контроль качества.axe-core позволяет сохранять результаты аудита в JSON для дальнейшей аналитики:
import fs from 'fs';
fs.writeFileSync('axe-results.json', JSON.stringify(results, null, 2));
Собранные данные можно визуализировать или интегрировать с другими инструментами CI/CD, например с SonarQube или Allure, чтобы получать отчеты о доступности вместе с тестами покрытия кода и функциональными тестами.
В больших проектах полезно иметь разные конфигурации axe-core для разработки, staging и production:
Это достигается через отдельные файлы конфигурации или через переменные окружения:
const config = process.env.CI
? { runOnly: ['wcag2aa'] }
: { runOnly: ['wcag21aa', 'section508'] };
axe.run(document, config, (err, results) => {
console.log(results.violations);
});
Такой подход позволяет автоматизировать проверки доступности, предотвращая появление нарушений на релизных версиях приложения.