Accessibility Scan Workshop

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

Lab 03: IBM Equal Access — Comprehensive Policy Scanning

   
Duration 30 minutes
Level Intermediate
Prerequisites Lab 01

Learning Objectives

By the end of this lab, you will be able to:

Exercises

Exercise 3.1: Understand IBM Equal Access

The scanner supports two accessibility engines. You will review how IBM Equal Access complements axe-core.

  1. 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
  2. Key differences to note:

    • IBM Equal Access uses the ACE (Accessibility Conformance Engine) which includes rules beyond WCAG, such as IBM-specific requirements.
    • IBM categorizes findings as Violation (definite failure), Need Review (potential issue requiring human judgment), and Recommendation (best practice suggestion).
    • The scanner’s 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.

Exercise 3.2: Run IBM Scan on Demo App 002

You will scan a demo app using the IBM Equal Access engine.

  1. Ensure demo app 002 is running at http://localhost:8002.

  2. Open the scanner web UI at http://localhost:3000.

  3. Enter the demo app 002 URL and select the scan options. If the scanner supports engine selection, choose IBM Equal Access or Combined mode.

  4. Review the results. IBM Equal Access typically finds additional issues that axe-core does not flag, such as:
    • Elements that need review for keyboard operability
    • Advisory recommendations for ARIA usage
    • Policy-specific checks for form interactions

    IBM scan results

  5. 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.

    IBM violation detail

Exercise 3.3: Compare IBM and axe-core Findings

You will compare the findings from both engines on the same page.

  1. 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

    Comparison table

  2. Note that some violations are detected by both engines under different rule names. The scanner normalizes and deduplicates these in the combined report.

  3. Pay attention to findings that appear only in IBM Equal Access. These are often related to:

    • ARIA attribute validation
    • Widget role definitions
    • Proper use of tabindex
    • Reading order and focus management

Exercise 3.4: Review Combined Report

The scanner can merge findings from both engines into a single deduplicated report.

  1. 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
    
  2. Open results/demo-002-combined.json and review the structure. The combined report:
    • Lists each unique violation once, even if both engines detected it
    • Indicates which engine(s) flagged each finding
    • Preserves the highest impact level when engines disagree

    Combined report output

  3. Review how deduplication works:

    Deduplication logic

    • Rules are matched by their target WCAG success criterion
    • When both engines find the same violation on the same element, a single entry is created
    • Engine-specific metadata is preserved for traceability

[!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.

Verification Checkpoint

Before proceeding, verify:

Next Steps

Proceed to Lab 04: Custom Playwright Checks — Manual Inspection.