Learn to scan web applications for WCAG 2.2 accessibility violations using axe-core, IBM Equal Access, and custom Playwright checks.
View the Project on GitHub devopsabcs-engineering/accessibility-scan-workshop
| Duration | 30 minutes |
| Level | Intermediate |
| Prerequisites | Lab 01 |
By the end of this lab, you will be able to:
The scanner supports two accessibility engines. You will review how IBM Equal Access complements axe-core.
Review the engine comparison:
| Aspect | axe-core | IBM Equal Access |
|---|---|---|
| Maintainer | Deque Systems | IBM |
| Rule count | ~90 rules | ~400+ rules |
| Focus | WCAG conformance testing | Policy-based assessment (WCAG + IBM requirements) |
| Result types | Violation / Pass / Incomplete | Violation / Need Review / Recommendation |
| Strengths | Fast, industry standard, low false-positive rate | Broader rule coverage, policy customization, government compliance |
Key differences to note:
accessibility-checker npm package provides the IBM engine integration.[!NOTE] Both engines are complementary. axe-core catches common violations with high confidence, while IBM Equal Access provides broader coverage and catches issues axe-core may miss.
You will scan a demo app using the IBM Equal Access engine.
Ensure demo app 002 is running at http://localhost:8002.
Open the scanner web UI at http://localhost:3000.
Enter the demo app 002 URL and select the scan options. If the scanner supports engine selection, choose IBM Equal Access or Combined mode.

Click on a specific IBM finding to view its details. Note the difference in rule identifiers — IBM rules use identifiers like WCAG20_Html_HasLang while axe-core uses html-has-lang.

You will compare the findings from both engines on the same page.
Review the side-by-side comparison for demo app 002:
| Category | axe-core | IBM Equal Access |
|---|---|---|
| Total findings | ~20–30 violations | ~40–60 violations + need-review |
| Language check | html-has-lang |
WCAG20_Html_HasLang |
| Image alt text | image-alt |
WCAG20_Img_HasAlt |
| Color contrast | color-contrast |
IBMA_Color_Contrast_WCAG2AA |
| Form labels | label |
WCAG20_Input_ExplicitLabel |
| Unique to engine | Keyboard trap detection | Need-review items, recommendation items |

Note that some violations are detected by both engines under different rule names. The scanner normalizes and deduplicates these in the combined report.
Pay attention to findings that appear only in IBM Equal Access. These are often related to:
tabindexThe scanner can merge findings from both engines into a single deduplicated report.
Run a combined scan (both engines) on demo app 002 via the CLI:
npx ts-node src/cli/commands/scan.ts --url http://localhost:8002 --format json --output results/demo-002-combined.json
results/demo-002-combined.json and review the structure. The combined report:

Review how deduplication works:

[!TIP] Using both engines together provides the most comprehensive coverage. axe-core’s low false-positive rate combined with IBM’s broader rule set catches violations that either engine alone would miss.
Before proceeding, verify:
Proceed to Lab 04: Custom Playwright Checks — Manual Inspection.