A11y тестирование

Основы доступности

Доступность (Accessibility, A11y) — критически важный аспект веб-разработки, обеспечивающий возможность взаимодействия с приложением пользователям с ограниченными возможностями. В контексте Polymer, A11y тестирование охватывает проверку пользовательских компонентов на корректную работу с клавиатурой, экранными читалками и другими вспомогательными технологиями.

Polymer активно использует Web Components, что требует особого внимания к семантике элементов. Стандартные HTML-теги имеют встроенную поддержку доступности, но кастомные элементы по умолчанию не обладают полной семантикой, поэтому разработчик обязан явно задавать ARIA-атрибуты и поведение.

Использование встроенных инструментов A11y

Polymer предоставляет специализированные инструменты для тестирования доступности:

  1. @polymer/iron-a11y-keys Позволяет отслеживать нажатия клавиш и управлять фокусом внутри компонента. Основные методы:

    • addEventListener('keys-pressed', callback) — обработка комбинаций клавиш.
    • Конфигурация через свойство keys для указания комбинаций.
  2. @polymer/iron-a11y-announcer Используется для передачи сообщений экранным читалкам. Работает через вызов функции announce(message, manner), где manner может быть polite или assertive.

  3. @polymer/iron-a11y-attributes Автоматически добавляет ARIA-атрибуты к элементам, например role="button", aria-pressed, если элемент ведет себя как кнопка.

Организация A11y тестирования

A11y тестирование в Polymer обычно интегрируется с фреймворком WCT (Web Component Tester). Важные шаги:

  1. Подготовка тестовой среды В test-папке создаются файлы вида my-component-a11y.html. Подключается сам компонент и необходимые зависимости для тестирования доступности.

  2. Использование chai-a11y-axe Плагин для интеграции Axe с WCT позволяет автоматически проверять компонент на соответствие стандартам WCAG 2.1. Пример теста:

    suite('my-component a11y', () => {
      test('доступность компонента', async () => {
        const el = fixture('my-component-fixture');
        await expect(el).to.be.accessible();
      });
    });

    В данном тесте автоматически проверяются:

    • корректные ARIA-атрибуты,
    • правильная структура DOM,
    • возможность навигации с клавиатуры,
    • контраст текста и фонов.
  3. Тестирование фокуса и клавиатурного взаимодействия Для каждого интерактивного элемента проверяется:

    • доступность через клавишу Tab,
    • логичная последовательность фокуса,
    • обработка Enter/Space для кнопок и переключателей.

    Пример проверки фокуса:

    test('фокус на кнопке', () => {
      const el = fixture('my-component-fixture');
      const btn = el.shadowRoot.querySelector('button');
      btn.focus();
      assert.equal(document.activeElement, btn);
    });

Практические рекомендации

  • Явное указание ролей: даже если элемент визуально выглядит как кнопка, без role="button" экранные читалки не смогут корректно идентифицировать его.
  • ARIA-атрибуты для состояний: aria-checked, aria-expanded, aria-disabled должны синхронизироваться с состоянием компонента.
  • Семантическая разметка: там, где возможно, использовать стандартные HTML-элементы (button, input, a), добавляя кастомное поведение через Polymer.
  • Shadow DOM: при использовании Shadow DOM следует учитывать, что многие вспомогательные технологии не видят его содержимое напрямую, поэтому важно правильно проксировать события и атрибуты наружу.

Интеграция в CI/CD

A11y тесты Polymer-компонентов легко включаются в пайплайны CI/CD, поскольку WCT поддерживает Headless Chrome. Это позволяет автоматизировать проверку доступности на каждом этапе разработки и предотвращать регрессии при изменении компонентов.

Проверка на разных устройствах

Эффективное тестирование A11y требует проверки не только в браузере, но и на мобильных устройствах с экранными читалками (например, VoiceOver на iOS, TalkBack на Android). Также рекомендуется использовать эмуляторы низкого контраста и масштабирования текста для проверки визуальной доступности.

Логирование и диагностика

При нарушениях доступности Axe или WCT выводят подробные отчёты с указанием:

  • типа проблемы (color-contrast, aria-roles, focus-order),
  • местоположения в DOM,
  • рекомендаций по исправлению.

Эти данные позволяют быстро локализовать проблему и корректно её устранить, не нарушая архитектуры Web Components.


Polymer предоставляет широкий набор инструментов для обеспечения доступности компонентов, но правильная организация тестирования и соблюдение семантики остаются ключевыми аспектами.