К основному содержанию
скилл CX Codex

screen-reader-testing — скилл для Claude Code: тесты доступности

Скилл помогает проверять веб-приложения с VoiceOver, NVDA и JAWS. Пригодится для отладки ARIA, форм, навигации и объявлений динамического контента.

Установить в Claude Code · Через маркетплейс плагинов Все способы и платформы ↓
/plugin marketplace add wshobson/agents
/plugin install accessibility-compliance@claude-code-workflows
Открыть на GitHub

Что делает screen-reader-testing

Внутри — рекомендации по проверке режимов чтения и взаимодействия, а также сценарии для модальных окон, live regions и вкладок. Скилл описывает управление фокусом, клавиатурную навигацию и отладку доступного имени, состояния и видимости элемента.

Для разных программ чтения с экрана приведены инструкции и ссылки на материалы по настройке: VoiceOver для macOS и iOS, NVDA, JAWS и TalkBack. Руководство советует проверять приложение реальными скринридерами, а не ограничиваться симуляторами, и тестировать ошибки и динамический контент. Ставьте скилл, если проверяете доступность веб-интерфейса; для проектов без такой задачи он не нужен.

Какие задачи решает

  • проверить ARIA-реализацию с программой чтения с экрана
  • отладить управление фокусом в модальном окне
  • проверить доступность полей формы и сообщений об ошибках
  • протестировать объявления динамического контента
  • проверить клавиатурную навигацию по вкладкам

Примеры запросов агенту

  • Проверь доступность формы с NVDA и найди проблемы с объявлениями ошибок.
  • Проведи тест модального окна: проверь фокус, клавишу Escape и возврат фокуса.
  • Проверь вкладки на клавиатурную навигацию и корректные ARIA-состояния.

Как установить screen-reader-testing

1Через маркетплейс плагинов

/plugin marketplace add wshobson/agents
/plugin install accessibility-compliance@claude-code-workflows

Команда ставит плагин accessibility-compliance целиком, со всеми его скиллами

2Через Skills CLI (Vercel)

npx skills add wshobson/agents --skill screen-reader-testing -a claude-code

3Вручную: положить файлы

~/.claude/skills/screen-reader-testing/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/screen-reader-testing/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о screen-reader-testing

Как установить screen-reader-testing в Claude Code?

Выполните npx skills add wshobson/agents --skill screen-reader-testing -a claude-code. Скилл также можно установить через marketplace командой /plugin install accessibility-compliance@claude-code-workflows.

Что делает screen-reader-testing?

Помогает тестировать веб-приложения с программами чтения с экрана. В руководстве есть сценарии для модальных окон, live regions, вкладок и проверки фокуса.

Какие программы чтения с экрана рассматривает скилл?

В руководстве описаны VoiceOver, NVDA, JAWS, TalkBack и Narrator. Для VoiceOver, NVDA, JAWS и TalkBack предусмотрены материалы по настройке и командам.

Исходный текст

SKILL.md · MIT
---
name: screen-reader-testing
description: Test web applications with screen readers including VoiceOver, NVDA, and JAWS. Use when validating screen reader compatibility, debugging accessibility issues, or ensuring assistive technology support.
---

# Screen Reader Testing

Practical guide to testing web applications with screen readers for comprehensive accessibility validation.

## When to Use This Skill

- Validating screen reader compatibility
- Testing ARIA implementations
- Debugging assistive technology issues
- Verifying form accessibility
- Testing dynamic content announcements
- Ensuring navigation accessibility

## Core Concepts

### 1. Major Screen Readers

| Screen Reader | Platform  | Browser        | Usage |
| ------------- | --------- | -------------- | ----- |
| **VoiceOver** | macOS/iOS | Safari         | ~15%  |
| **NVDA**      | Windows   | Firefox/Chrome | ~31%  |
| **JAWS**      | Windows   | Chrome/IE      | ~40%  |
| **TalkBack**  | Android   | Chrome         | ~10%  |
| **Narrator**  | Windows   | Edge           | ~4%   |

### 2. Testing Priority

```
Minimum Coverage:
1. NVDA + Firefox (Windows)
2. VoiceOver + Safari (macOS)
3. VoiceOver + Safari (iOS)

Comprehensive Coverage:
+ JAWS + Chrome (Windows)
+ TalkBack + Chrome (Android)
+ Narrator + Edge (Windows)
```

### 3. Screen Reader Modes

| Mode               | Purpose                | When Used         |
| ------------------ | ---------------------- | ----------------- |
| **Browse/Virtual** | Read content           | Default reading   |
| **Focus/Forms**    | Interact with controls | Filling forms     |
| **Application**    | Custom widgets         | ARIA applications |

Before testing on macOS, read [VoiceOver setup, commands, and checklists](references/voiceover.md).

For the required iOS Safari coverage, read [VoiceOver touch setup and gestures](references/voiceover-ios.md).

Before testing with NVDA, read [NVDA setup, modes, commands, and test scripts](references/nvda.md).

Before testing with JAWS or TalkBack, read [platform setup and commands](references/jaws-talkback.md).

## Common Test Scenarios

### 1. Modal Dialog

```html
<!-- Accessible modal structure -->
<div
  role="dialog"
  aria-modal="true"
  aria-labelledby="dialog-title"
  aria-describedby="dialog-desc"
>
  <h2 id="dialog-title">Confirm Delete</h2>
  <p id="dialog-desc">This action cannot be undone.</p>
  <button>Cancel</button>
  <button>Delete</button>
</div>
```

```javascript
// Focus management
function openModal(modal) {
  // Store last focused element
  lastFocus = document.activeElement;

  // Move focus to modal
  modal.querySelector("h2").focus();

  // Trap focus
  modal.addEventListener("keydown", trapFocus);
}

function closeModal(modal) {
  // Return focus
  lastFocus.focus();
}

function trapFocus(e) {
  if (e.key === "Tab") {
    const focusable = modal.querySelectorAll(
      'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
    );
    const first = focusable[0];
    const last = focusable[focusable.length - 1];

    if (e.shiftKey && document.activeElement === first) {
      last.focus();
      e.preventDefault();
    } else if (!e.shiftKey && document.activeElement === last) {
      first.focus();
      e.preventDefault();
    }
  }

  if (e.key === "Escape") {
    closeModal(modal);
  }
}
```

### 2. Live Regions

```html
<!-- Status messages (polite) -->
<div role="status" aria-live="polite" aria-atomic="true">
  <!-- Content updates will be announced after current speech -->
</div>

<!-- Alerts (assertive) -->
<div role="alert" aria-live="assertive">
  <!-- Content updates interrupt current speech -->
</div>

<!-- Progress updates -->
<div
  role="progressbar"
  aria-valuenow="75"
  aria-valuemin="0"
  aria-valuemax="100"
  aria-label="Upload progress"
></div>

<!-- Log (additions only) -->
<div role="log" aria-live="polite" aria-relevant="additions">
  <!-- New messages announced, removals not -->
</div>
```

### 3. Tab Interface

```html
<div role="tablist" aria-label="Product information">
  <button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1">
    Description
  </button>
  <button
    role="tab"
    id="tab-2"
    aria-selected="false"
    aria-controls="panel-2"
    tabindex="-1"
  >
    Reviews
  </button>
</div>

<div role="tabpanel" id="panel-1" aria-labelledby="tab-1">
  Product description content...
</div>

<div role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>
  Reviews content...
</div>
```

```javascript
// Tab keyboard navigation
tablist.addEventListener("keydown", (e) => {
  const tabs = [...tablist.querySelectorAll('[role="tab"]')];
  const index = tabs.indexOf(document.activeElement);

  let newIndex;
  switch (e.key) {
    case "ArrowRight":
      newIndex = (index + 1) % tabs.length;
      break;
    case "ArrowLeft":
      newIndex = (index - 1 + tabs.length) % tabs.length;
      break;
    case "Home":
      newIndex = 0;
      break;
    case "End":
      newIndex = tabs.length - 1;
      break;
    default:
      return;
  }

  tabs[newIndex].focus();
  activateTab(tabs[newIndex]);
  e.preventDefault();
});
```

## Debugging Tips

```javascript
// Log what screen reader sees
function logAccessibleName(element) {
  const computed = window.getComputedStyle(element);
  console.log({
    role: element.getAttribute("role") || element.tagName,
    name:
      element.getAttribute("aria-label") ||
      element.getAttribute("aria-labelledby") ||
      element.textContent,
    state: {
      expanded: element.getAttribute("aria-expanded"),
      selected: element.getAttribute("aria-selected"),
      checked: element.getAttribute("aria-checked"),
      disabled: element.disabled,
    },
    visible: computed.display !== "none" && computed.visibility !== "hidden",
  });
}
```

## Best Practices

### Do's

- **Test with actual screen readers** - Not just simulators
- **Use semantic HTML first** - ARIA is supplemental
- **Test in browse and focus modes** - Different experiences
- **Verify focus management** - Especially for SPAs
- **Test keyboard only first** - Foundation for SR testing

### Don'ts

- **Don't assume one SR is enough** - Test multiple
- **Don't ignore mobile** - Growing user base
- **Don't test only happy path** - Test error states
- **Don't skip dynamic content** - Most common issues
- **Don't rely on visual testing** - Different experience

© Seth Hobson · MIT · wshobson/agents

Похожие скиллы

Всё по теме «Фронтенд и UI» →
screen-recording официальный github Скилл помогает записывать действия в браузере или на рабочем столе в GIF и добавлять к кадрам аннотации. Пригодится для демонстрации функций, багов и исправлений. 149установок webapp-testing официальный anthropics Скилл запускает проверки локальных веб-приложений через Playwright: помогает отлаживать UI, делать скриншоты и смотреть логи браузера. 186 758установок browser-testing-with-devtools addyosmani Скилл подключает агента к браузеру через Chrome DevTools MCP. Помогает проверять верстку, ошибки в консоли и сетевые запросы прямо во время отладки фронтенда. CX Codex +1 58 600установок react-testing affaan-m Скилл для написания тестов React-компонентов, хуков и страниц: React Testing Library, Vitest или Jest, MSW для моков сети и проверки доступности через axe. CX Codex +1 4 800установок frontend-design официальный anthropics Скилл задаёт осмысленное визуальное направление для новых интерфейсов и редизайна. Подойдёт, когда стандартный шаблонный UI не устраивает. 1 025 790установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. CX Codex +1 678 700установок prototype Matt Pocock Создаёт временный прототип, чтобы проверить логику, модель состояния или вид интерфейса до работы над основным кодом. 986 201установок hyperframes heygen-com Скилл задаёт агенту правила рендера HTML-кода в видео через HyperFrames. Помогает собирать проморолики, эксплейнеры и титры прямо в коде проекта. CX Codex +1 1 200 000установок

Из того же набора342

Весь набор →
similarity-search-patterns Скилл помогает проектировать поиск по сходству в векторных базах данных: от семантического поиска и RAG до гибридной выдачи и настройки индексов. CX Codex 10 700установок spark-optimization Скилл помогает разбирать медленные задания Apache Spark и настраивать партиционирование, кэширование, shuffle и память. Подойдёт для пайплайнов обработки данных. CX Codex 10 700установок multi-cloud-architecture Скилл помогает проектировать системы для AWS, Azure, GCP и OCI, сравнивать сервисы и выбирать схему миграции или отказоустойчивости. CX Codex 10 700установок saga-orchestration Скилл проектирует саги для распределённых транзакций и долгих бизнес-процессов. Пригодится, когда 2PC недоступен и нужны компенсирующие действия. CX Codex 10 700установок pci-compliance Скилл помогает проектировать обработку платёжных данных по PCI DSS: от токенизации и шифрования до контроля доступа и журналов. CX Codex 10 600установок turborepo-caching Скилл настраивает Turborepo для локального и удалённого кэширования сборок. Пригодится для монорепозиториев, CI/CD и поиска промахов кэша. CX Codex 10 600установок hybrid-cloud-networking Скилл помогает спроектировать связь между локальной инфраструктурой и AWS, Azure, GCP или OCI через VPN и выделенные подключения. CX Codex 10 600установок employment-contract-templates Скилл готовит трудовые договоры, оффер-письма и HR-политики по правовым практикам. Пригодится для найма, онбординга и унификации документов. CX Codex 10 500установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой