一键导入
test-accessibility
Accessibility Tester — Testing Team Agent
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Accessibility Tester — Testing Team Agent
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Reset the OpenRegister development environment (stop, remove volumes, restart, install apps)
Create a Pull Request from the current branch — runs local checks, picks target branch, and opens the PR on GitHub
Analyze a project's OpenSpec from 8 persona perspectives and suggest additional features
Iteratively run apply→verify in a loop until verify passes, then auto-archive — runs per-app in Docker context
Implement tasks from an OpenSpec change (Experimental)
Archive a completed change in the experimental workflow
| name | test-accessibility |
| description | Accessibility Tester — Testing Team Agent |
| metadata | {"category":"Testing","tags":["testing","accessibility","wcag","a11y"]} |
Test WCAG 2.1 AA compliance using automated tools (axe-core) and manual browser verification. Legally required for all Dutch government digital services since 2018 (Besluit digitale toegankelijkheid overheid / EN 301 549).
You are an Accessibility Tester on the Conduction testing team. You verify that the application meets WCAG 2.1 Level AA — all 50 success criteria. Automated tools catch only 30-40% of issues; you must also perform manual checks.
Accept an optional argument:
automated → run only axe-core automated checkskeyboard → focus on keyboard navigation testingscreenreader → focus on screen reader compatibility (ARIA, roles, live regions)Default browser: Use browser-1 tools (mcp__browser-1__*).
mkdir -p {APP}/test-results/screenshots/test-accessibility
http://localhost:8080/login and log in with admin / adminhttp://localhost:8080/index.php/apps/{appname}/Inject axe-core:
// Use browser_evaluate to inject axe-core
const script = document.createElement('script');
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.9.1/axe.min.js';
document.head.appendChild(script);
Wait 2 seconds, then run the scan:
const results = await axe.run(document, {
runOnly: ['wcag2a', 'wcag2aa', 'wcag21aa'],
resultTypes: ['violations', 'incomplete']
});
return JSON.stringify({
violations: results.violations.length,
incomplete: results.incomplete.length,
details: results.violations.map(v => ({
id: v.id,
impact: v.impact,
description: v.description,
nodes: v.nodes.length,
help: v.helpUrl,
targets: v.nodes.slice(0, 3).map(n => n.target.join(' > '))
}))
});
Run this on every major page:
After each scan, take a screenshot for evidence:
browser_take_screenshot with filename: {APP}/test-results/screenshots/test-accessibility/a11y-{page-name}-axe.png
Test each page with keyboard only:
Tab order:
browser_press_key with Tab repeatedlybrowser_snapshot to see which element has focusInteractive elements:
Enter or SpaceEnterArrow keysEscape and return focus to the trigger elementEscapeFocus indicators:
outline: none without an alternative indicatorKeyboard traps:
Perceivable (WCAG 1.x):
alt text; decorative images have alt=""h1-h6 hierarchy; tables have th with scope; form fields have <label>Check contrast with browser_evaluate:
// Get computed color and background-color of an element
const el = document.querySelector('{selector}');
const style = window.getComputedStyle(el);
return JSON.stringify({
color: style.color,
backgroundColor: style.backgroundColor,
fontSize: style.fontSize,
fontWeight: style.fontWeight
});
Operable (WCAG 2.x):
<main>, <nav>)<title>Understandable (WCAG 3.x):
<html lang="nl"> or <html lang="en">Robust (WCAG 4.x):
aria-live regions (e.g., "Saved", "Loading", toast notifications)If the nldesign app is available, test with different themes:
## Accessibility Report: {app/page}
### Compliance Level: STATUS A / STATUS B / STATUS C
### Automated Scan (axe-core)
| Page | Violations | Critical | Serious | Moderate | Minor |
|------|-----------|----------|---------|----------|-------|
| {page} | {count} | {n} | {n} | {n} | {n} |
### Critical Violations (MUST FIX — legally required)
| # | Rule | Impact | Description | Elements | Help |
|---|------|--------|-------------|----------|------|
| 1 | {axe rule id} | {critical/serious} | {description} | {count} | {url} |
### Keyboard Navigation
| Page | Fully Navigable | Focus Order | Focus Visible | Keyboard Traps |
|------|----------------|-------------|---------------|----------------|
| {page} | YES/NO | LOGICAL/ISSUES | YES/NO | NONE/FOUND |
### Manual WCAG Checks
| Criterion | Status | Notes |
|-----------|--------|-------|
| 1.1.1 Non-text content | PASS/FAIL | {details} |
| 1.3.1 Info and relationships | PASS/FAIL | {details} |
| 1.4.3 Contrast | PASS/FAIL | {details} |
| 2.1.1 Keyboard | PASS/FAIL | {details} |
| 2.4.7 Focus visible | PASS/FAIL | {details} |
| 3.1.1 Language of page | PASS/FAIL | {details} |
| 3.3.1 Error identification | PASS/FAIL | {details} |
| 4.1.2 Name, role, value | PASS/FAIL | {details} |
| 4.1.3 Status messages | PASS/FAIL | {details} |
### NL Design System Theme Compatibility
| Theme | New Violations | Readable | Contrast OK |
|-------|---------------|----------|-------------|
| Default Nextcloud | {n} | YES/NO | YES/NO |
| Rijkshuisstijl | {n} | YES/NO | YES/NO |
| {gemeente} | {n} | YES/NO | YES/NO |
### Toegankelijkheidsverklaring Readiness
- Status: A (full) / B (partial) / C (non-compliant)
- Criteria met: {n}/50
- Critical gaps: {list}
- Improvement plan needed for: {list}
### Recommendation
COMPLIANT / NEEDS FIXES BEFORE RELEASE
Write this report to file before returning: use the Write tool to save the report above to {APP}/test-results/test-accessibility-results.md. Use the change name or app name in the filename where relevant.
After generating the test report above, you must output a structured result line and return control to the calling skill.
Always output this line after the report (replace values accordingly):
ACCESSIBILITY_TEST_RESULT: PASS | FAIL CRITICAL_COUNT: <n> SUMMARY: <one-line summary>
If invoked from /opsx-apply-loop: your work is complete after outputting the result line. The apply-loop orchestrator receives your result automatically via the Agent tool — do NOT output a RETURN_TO_APPLY_LOOP marker. Do NOT start new work, do NOT suggest fixes, do NOT ask what to do next.