Основные возможности и преимущества

Axe-core — это библиотека для автоматизированного тестирования доступности веб-приложений, разработанная для интеграции с JavaScript. Она предоставляет мощный и гибкий инструмент для проверки соответствия интерфейсов стандартам доступности, таким как WCAG 2.1 и ARIA. Библиотека ориентирована на разработчиков и тестировщиков, позволяя выявлять ошибки доступности на ранних этапах разработки.


Интеграция с JavaScript

Axe-core может работать как в браузере, так и в среде Node.js. Основные способы интеграции:

  • Через браузерные расширения: позволяет проводить тестирование на уже работающих страницах.
  • Через API: предоставляет методы для программного вызова анализа доступности.
  • Через фреймворки тестирования: легко интегрируется с Jest, Cypress, Puppeteer и другими инструментами автоматизации.

Пример использования в Node.js:

const { AxePuppeteer } = require('axe-puppeteer');
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  
  const results = await new AxePuppeteer(page).analyze();
  console.log(results.violations);
  
  await browser.close();
})();

В этом примере Axe-core анализирует веб-страницу и возвращает список нарушений доступности с подробной информацией о каждом.


Типы проверок доступности

Axe-core выполняет комплексный анализ элементов страницы, проверяя их на соответствие ключевым критериям доступности:

  1. Структурные ошибки: отсутствие семантических тегов, неправильная вложенность элементов, отсутствие заголовков.
  2. Контрастность: проверка цветового контраста текста и фона для обеспечения читаемости.
  3. ARIA-атрибуты: проверка правильности использования ролей, свойств и состояний ARIA.
  4. Фокус и навигация: контроль правильного порядка фокусировки и доступности интерактивных элементов.
  5. Формы и интерактивные элементы: анализ label, placeholder, required и aria-describedby для форм.

Каждое нарушение классифицируется по уровню серьёзности: critical, serious, moderate, minor, что позволяет приоритизировать исправления.


Преимущества использования Axe-core

  • Высокая точность анализа: минимизирует ложные срабатывания по сравнению с другими инструментами.
  • Поддержка современных стандартов: регулярно обновляется в соответствии с WCAG и рекомендациями W3C.
  • Гибкость интеграции: подходит для unit-тестов, end-to-end тестов и ручного анализа.
  • Подробные отчёты: каждая ошибка сопровождается описанием проблемы, её местоположением и рекомендациями по исправлению.
  • Открытый исходный код: библиотека бесплатна и активно поддерживается сообществом.

Настройка и фильтрация правил

Axe-core позволяет настраивать набор проверок под конкретные нужды проекта. Например, можно отключить определённые правила или ограничить анализ определёнными элементами страницы:

const results = await new AxePuppeteer(page)
  .withRules(['color-contrast', 'label'])
  .analyze();

Также поддерживается динамическая фильтрация результатов по уровню серьёзности:

const criticalViolations = results.violations.filter(v => v.impact === 'critical');

Это облегчает интеграцию с CI/CD, позволяя фиксировать только наиболее значимые проблемы.


Использование с современными фреймворками

Axe-core совместима с React, Angular, Vue и другими библиотеками. Для React существует пакет @axe-core/react, который позволяет подключать инструмент к компонентам и получать предупреждения в консоли разработки при нарушении доступности. Это обеспечивает реальное время контроля качества интерфейса, не дожидаясь финального тестирования.

Пример для React:

import React from 'react';
import ReactDOM from 'react-dom';
import axe from '@axe-core/react';
import App from './App';

if (process.env.NODE_ENV !== 'production') {
  axe(React, ReactDOM, 1000);
}

ReactDOM.render(<App />, document.getElementById('root'));

Автоматизация тестирования

Комбинация Axe-core с Jest или Cypress позволяет интегрировать проверки доступности в автоматические тесты. Это гарантирует, что каждая сборка проходит проверку доступности без дополнительных усилий со стороны разработчиков.

Пример интеграции с Cypress:

describe('Accessibility checks', () => {
  it('Has no detectable accessibility violations on load', () => {
    cy.visit('https://example.com');
    cy.injectAxe();
    cy.checkA11y();
  });
});

Расширенные возможности

  • Снимки состояния страницы: можно сохранять результаты анализов для последующего сравнения.
  • Поддержка международных стандартов: проверка доступности для разных языков и локалей.
  • Модульность: библиотеку можно расширять собственными правилами или использовать только необходимые функции.

Axe-core позволяет превратить доступность из разового этапа тестирования в непрерывный процесс контроля качества, делая интерфейсы более дружелюбными и соответствующими современным требованиям веб-разработки.