🎯

accessibility-test-axe

🎯Skill

from dengineproblem/agents-monorepo

VibeIndex|
What it does

Automates web accessibility testing using axe-core, performing comprehensive WCAG compliance scans across web applications and components.

📦

Part of

dengineproblem/agents-monorepo(106 items)

accessibility-test-axe

Installation

DockerRun with Docker
docker compose up -d --build agent-brain
DockerRun with Docker
docker compose up -d --build agent-service
git cloneClone repository
git clone <repo-url>
DockerRun with Docker
docker compose up -d --build
Shell ScriptRun shell script
./test-video-upload.sh ./path/to/video.mp4

+ 3 more commands

📖 Extracted from docs: dengineproblem/agents-monorepo
2Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Эксперт по a11y тестированию. Используй для axe-core, automated testing и accessibility audits.

Overview

# Axe-Core Accessibility Testing Expert

Эксперт по автоматизированному тестированию доступности с использованием axe-core — индустриального стандарта для проверки соответствия WCAG.

Основная философия

Используйте shift-left подход — интегрируйте проверки доступности на ранних этапах разработки, а не после релиза. Комбинируйте автоматизированное сканирование axe-core с ручным тестированием.

Настройка axe-core

Установка

```bash

npm install axe-core @axe-core/playwright @axe-core/react

```

Базовое использование в браузере

```javascript

import axe from 'axe-core';

async function runAccessibilityAudit(element = document) {

try {

const results = await axe.run(element, {

runOnly: {

type: 'tag',

values: ['wcag2a', 'wcag2aa', 'wcag21aa']

}

});

return {

violations: results.violations,

passes: results.passes,

incomplete: results.incomplete,

inapplicable: results.inapplicable

};

} catch (error) {

console.error('Accessibility audit failed:', error);

throw error;

}

}

```

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

```javascript

import { test, expect } from '@playwright/test';

import AxeBuilder from '@axe-core/playwright';

test.describe('Accessibility Tests', () => {

test('should not have accessibility violations', async ({ page }) => {

await page.goto('/');

const accessibilityScanResults = await new AxeBuilder({ page })

.withTags(['wcag2a', 'wcag2aa', 'wcag21aa'])

.analyze();

expect(accessibilityScanResults.violations).toEqual([]);

});

test('specific component accessibility', async ({ page }) => {

await page.goto('/components/modal');

const results = await new AxeBuilder({ page })

.include('#modal-component')

.exclude('.decorative-element')

.analyze();

expect(results.violations).toEqual([]);

});

});

```

Интеграция со Storybook

```javascript

// .storybook/test-runner.js

const { injectAxe, checkA11y } = require('axe-playwright');

module.exports = {

async preRender(page) {

await injectAxe(page);

},

async postRender(page) {

await checkA11y(page, '#storybook-root', {

detailedReport: true,

detailedReportOptions: {

html: true

}

});

}

};

```

CI/CD интеграция (GitHub Actions)

```yaml

name: Accessibility Tests

on: [push, pull_request]

jobs:

a11y:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v3

- name: Setup Node.js

uses: actions/setup-node@v3

with:

node-version: '18'

- name: Install dependencies

run: npm ci

- name: Install Playwright

run: npx playwright install --with-deps

- name: Run accessibility tests

run: npm run test:a11y

- name: Upload results

if: failure()

uses: actions/upload-artifact@v3

with:

name: a11y-report

path: a11y-results.json

```

Обработка результатов

```javascript

function processViolations(violations) {

const report = {

critical: [],

serious: [],

moderate: [],

minor: []

};

violations.forEach(violation => {

const issue = {

id: violation.id,

impact: violation.impact,

description: violation.description,

help: violation.help,

helpUrl: violation.helpUrl,

nodes: violation.nodes.map(node => ({

html: node.html,

target: node.target,

failureSummary: node.failureSummary

}))

};

report[violation.impact].push(issue);

});

return report;

}

```

Конфигурация правил

```javascript

const axeConfig = {

rules: [

// Отключение правил для декоративных элементов

{ id: 'image-alt', enabled: true },

{ id: 'color-contrast', enabled: true },

{ id: 'label', enabled: true },

// Исключения для специфичных случаев

{

id: 'button-name',

selector: 'button:not(.icon-only)'

}

],

// Исключение областей

exclude: [

'.third-party-widget',

'#ads-container'

]

};

```

React интеграция

```javascript

import React from 'react';

import ReactDOM from 'react-dom';

import axe from '@axe-core/react';

if (process.env.NODE_ENV !== 'production') {

axe(React, ReactDOM, 1000);

}

// Компонент отчёта

function AccessibilityReport({ violations }) {

if (!violations.length) {

return

No accessibility violations found
;

}

return (

Accessibility Issues Found: {violations.length}

    {violations.map(violation => (

  • {violation.impact}: {violation.description}

    Learn more

  • ))}

);

}

```

Типичные нарушения и исправления

Недостаточный контраст цвета

```css

/ Плохо /

.text-light {

color: #999;

background: #fff;

}

/ Хорошо - соотношение 4.5:1 /

.text-light {

color: #767676;

background: #fff;

}

```

Отсутствие label у формы

```html

```

Кнопка без текста

```html

```

Мониторинг и отчётность

```javascript

class AccessibilityMonitor {

constructor() {

this.history = [];

}

async audit(url) {

const results = await runAccessibilityAudit();

this.history.push({

timestamp: new Date().toISOString(),

url,

violationCount: results.violations.length,

violations: results.violations

});

return this.generateTrend();

}

generateTrend() {

const recent = this.history.slice(-10);

return {

current: recent[recent.length - 1]?.violationCount || 0,

trend: this.calculateTrend(recent),

history: recent

};

}

}

```

Лучшие практики

  1. Интегрируйте в CI/CD — блокируйте merge при critical нарушениях
  2. Тестируйте рано — используйте в dev режиме React/Vue
  3. Комбинируйте методы — автоматические тесты + ручное тестирование
  4. Документируйте исключения — объясняйте почему правило отключено
  5. Отслеживайте тренды — мониторьте количество нарушений во времени

More from this repository10

🎯
creative-copywriter🎯Skill

Generates high-converting storytelling, offers, posts, and video texts by extracting key business context and applying targeted copywriting techniques.

🎯
k6-load-test🎯Skill

Generates and runs performance load tests using k6 to simulate user traffic and measure system response under various load conditions.

🎯
b2b-saas-marketing🎯Skill

Provides expert B2B SaaS marketing strategies for demand generation, growth marketing, lead optimization, and key performance metrics.

🎯
ios-unit-test🎯Skill

Generates comprehensive iOS unit tests using XCTest, following best practices like AAA pattern, mocking, and dependency injection for robust test coverage.

🎯
abm-specialist🎯Skill

Enables AI agents to perform advanced account-based marketing (ABM) strategies, targeting and analyzing potential enterprise clients with precision.

🎯
influencer-outreach-template🎯Skill

Generates personalized, high-converting influencer outreach templates with strategic personalization and compelling communication approaches.

🎯
openapi-documentation🎯Skill

openapi-documentation skill from dengineproblem/agents-monorepo

🎯
code-documentation-generator🎯Skill

code-documentation-generator skill from dengineproblem/agents-monorepo

🎯
integration-spec🎯Skill

integration-spec skill from dengineproblem/agents-monorepo

🎯
social-media-marketing🎯Skill

I apologize, but I cannot generate a description without seeing the actual code or context for the "social-media-marketing" skill from the repository. Could you provide more details about the skill...