Files
wehub-resource-sync 7a0da7932b
OSV-Scanner (Scheduled) / scan-scheduled (push) Failing after 0s
Create Release / test-gate (push) Has been cancelled
Create Release / release-gate (push) Has been cancelled
Create Release / ci-gate (push) Has been cancelled
Create Release / version-check (push) Has been cancelled
Create Release / e2e-test-gate (push) Has been cancelled
Create Release / responsive-test-gate (push) Has been cancelled
Create Release / compat-test-gate (push) Has been cancelled
Create Release / compose-integration-gate (push) Has been cancelled
Create Release / vulture-gate (push) Has been cancelled
Create Release / build (push) Has been cancelled
Create Release / provenance (push) Has been cancelled
Create Release / prerelease-docker (push) Has been cancelled
Create Release / publish-docker (push) Has been cancelled
Create Release / create-release (push) Has been cancelled
Create Release / cleanup-changelog (push) Has been cancelled
Create Release / trigger-pypi (push) Has been cancelled
Create Release / monitor-pypi (push) Has been cancelled
Create Release / Clean up orphan prerelease tags and signatures (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-form] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-metrics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-workflow] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-core] (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [history-news] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [library] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [link-analytics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-core] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-lifecycle] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [error-benchmark] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) (push) Has been cancelled
Docker Tests (Consolidated) / Accessibility Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Unit Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Example Tests (push) Has been cancelled
Docker Tests (Consolidated) / Production Image Smoke Test (push) Has been cancelled
Docker Tests (Consolidated) / Infrastructure Tests (push) Has been cancelled
OSSF Scorecard / OSSF Security Scorecard Analysis (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [mobile] (push) Has been cancelled
Backwards Compatibility / Verify Encryption Constants (push) Has been cancelled
Backwards Compatibility / PyPI Version Compatibility (push) Has been cancelled
Backwards Compatibility / Database Migration Tests (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Docker Tests (Consolidated) / detect-changes (push) Has been cancelled
Docker Tests (Consolidated) / Build Test Image (push) Has been cancelled
Docker Tests (Consolidated) / All Pytest Tests + Coverage (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [accessibility] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [api-crud] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-login] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-register] (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:08:55 +08:00

83 lines
2.5 KiB
JavaScript

/**
* Accessibility Testing Helper
* Provides reusable axe-core configuration and utilities for Playwright tests
*/
import AxeBuilder from '@axe-core/playwright';
/**
* Default WCAG 2.1/2.2 tags for accessibility testing
*/
const WCAG_TAGS = ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22aa'];
/**
* Create a pre-configured AxeBuilder instance
* @param {import('@playwright/test').Page} page - Playwright page object
* @param {Object} options - Configuration options
* @param {string[]} [options.tags] - WCAG tags to test (default: WCAG 2.1/2.2 A/AA)
* @param {string[]} [options.exclude] - Selectors to exclude from scan
* @param {string[]} [options.disableRules] - Rule IDs to disable
* @returns {AxeBuilder} Configured AxeBuilder instance
*/
export function createAxeBuilder(page, options = {}) {
const {
tags = WCAG_TAGS,
exclude = [],
disableRules = []
} = options;
let builder = new AxeBuilder({ page })
.withTags(tags);
// Add exclusions
exclude.forEach(selector => {
builder = builder.exclude(selector);
});
// Disable specific rules if provided
if (disableRules.length > 0) {
builder = builder.disableRules(disableRules);
}
return builder;
}
/**
* Filter violations by impact level
* @param {Object[]} violations - Array of violation objects
* @param {string[]} impacts - Impact levels to include ('critical', 'serious', 'moderate', 'minor')
* @returns {Object[]} Filtered violations
*/
function filterByImpact(violations, impacts) {
return violations.filter(v => impacts.includes(v.impact));
}
/**
* Get critical and serious violations only
* @param {Object[]} violations - Array of violation objects
* @returns {Object[]} Critical and serious violations
*/
export function getCriticalViolations(violations) {
return filterByImpact(violations, ['critical', 'serious']);
}
/**
* Format violations for console output
* @param {Object[]} violations - Array of violation objects
* @returns {string} Formatted string
*/
export function formatViolations(violations) {
if (violations.length === 0) {
return 'No accessibility violations found.';
}
const lines = violations.map(v => {
const nodes = v.nodes.map(n => ` - ${n.target.join(', ')}`).join('\n');
return `\n[${v.impact.toUpperCase()}] ${v.id}: ${v.description}\n Help: ${v.helpUrl}\n Affected elements:\n${nodes}`;
});
return `Found ${violations.length} accessibility violation(s):${lines.join('\n')}`;
}
export { WCAG_TAGS };