This guide will help QA consultants test for accessibility issues in this training application.
-
Install and Run the Application
npm install npm run dev
The application will be available at
http://localhost:3000 -
Familiarize Yourself with the Application
- Browse the homepage
- Navigate to product listing page
- View a product detail page
- Add items to cart
- Complete the checkout flow
- Installation: Browser extension for Chrome, Firefox, Edge
- Usage:
- Open the application in your browser
- Click the axe DevTools icon
- Click "Scan All of My Page"
- Review violations and warnings
- What it finds: Missing alt text, ARIA issues, color contrast, form labels, etc.
- Installation: Browser extension or online tool at wave.webaim.org
- Usage:
- Install the extension or use the online tool
- Navigate to a page
- Click the WAVE icon
- Review errors, alerts, and features
- What it finds: Structural issues, missing labels, contrast problems, ARIA issues
- Usage:
- Open Chrome DevTools (F12)
- Go to "Lighthouse" tab
- Select "Accessibility" category
- Click "Generate report"
- What it finds: Overall accessibility score and common issues
- NVDA (Free): Download from nvaccess.org
- JAWS (Paid): Industry standard, available with trial version
- VoiceOver: Built-in, activate with Cmd+F5
- Navigate through pages using keyboard only
- Listen to how content is announced
- Check if interactive elements are properly identified
- Verify form labels are read correctly
- Test dynamic content announcements (cart updates, errors)
-
Tab Navigation
- Press Tab to move forward through interactive elements
- Press Shift+Tab to move backward
- Verify focus order matches visual order
- Check that all interactive elements are reachable
-
Keyboard Shortcuts
- Enter/Space to activate buttons
- Arrow keys for dropdowns and radio buttons
- Escape to close modals/dialogs
-
Focus Indicators
- Verify visible focus indicators on all interactive elements
- Check that focus is clearly visible
- Page has a descriptive title
- Page has a main heading (h1)
- Heading hierarchy is logical (h1 → h2 → h3)
- Skip to main content link is present
- Page has proper landmarks (
<main>,<nav>,<header>,<footer>)
- All images have alt text
- Decorative images have
alt="" - Product images have descriptive alt text
- Complex images have detailed descriptions
- All form fields have associated labels
- Required fields are marked (visually and with aria-required)
- Error messages are associated with fields (aria-describedby)
- Form sections use fieldset/legend
- Form validation errors are announced to screen readers
- Navigation is keyboard accessible
- Focus order is logical
- Active page is indicated (aria-current)
- Links have descriptive text
- Breadcrumbs use proper semantic structure
- Text has sufficient contrast (4.5:1 for normal text, 3:1 for large text)
- Links have sufficient contrast from body text
- Error messages have sufficient contrast
- Information is not conveyed by color alone
- Cart count updates are announced (aria-live)
- Search results are announced
- Error messages are announced
- Success messages are announced
- Loading states are indicated (aria-busy)
- Tables have headers (
<th>) - Headers have scope attributes
- Tables have captions if needed
- Table cells are associated with headers
- All interactive elements are keyboard accessible
- Focus indicators are visible
- Focus order matches visual order
- No keyboard traps
- Modals/dialogs manage focus properly
- Check product images, icons, decorative images
- Verify alt text is descriptive for product images
- Verify decorative images have
alt=""
- Check if inputs use placeholders instead of labels
- Verify labels are associated with inputs (for/id or aria-labelledby)
- Check if required fields are marked
- Verify h1 exists on each page
- Check heading order (h1 → h2 → h3, no skipping)
- Verify headings describe page structure
- Use contrast checker tools
- Test text on colored backgrounds
- Verify links are distinguishable from body text
- Check error messages have sufficient contrast
- Tab through entire page
- Verify all interactive elements are reachable
- Check focus indicators are visible
- Test keyboard traps in dropdowns/modals
- Check if ARIA attributes are used correctly
- Verify aria-live regions for dynamic content
- Check aria-expanded on collapsible content
- Verify aria-label on icon-only buttons
- Check for skip link
- Verify h1 heading exists
- Test product card images for alt text
- Test category navigation links
- Test search functionality
- Test search input label
- Test filter sidebar keyboard navigation
- Test sort dropdown
- Verify product grid images have alt text
- Test pagination (if present)
- Test product gallery keyboard navigation
- Verify product images have alt text
- Test quantity input label
- Test size/color selects
- Test "Add to Cart" button
- Verify toast notification announcements
- Test table structure and headers
- Test quantity inputs for labels
- Test remove buttons for accessible names
- Test checkout button
- Verify price information structure
- Test all form fields for labels
- Test form validation error announcements
- Test required field indicators
- Test form sections (fieldset/legend)
- Test submit button
When documenting accessibility issues, include:
- Issue Type: WCAG criterion (e.g., "1.1.1 Non-text Content")
- Severity: Level A, AA, or AAA
- Location: Page/component and specific element
- Description: What's wrong and why it's an issue
- Impact: How it affects users
- Recommendation: How to fix it
- Screenshot/Code: Visual or code reference
**Issue**: Missing alt text on product images
**WCAG**: 1.1.1 Non-text Content (Level A)
**Location**: ProductCard component, homepage
**Description**: Product images lack alt text, making them inaccessible to screen reader users
**Impact**: Screen reader users cannot understand what products are displayed
**Recommendation**: Add descriptive alt text: `alt={product.name}`
**Code Reference**: components/ProductCard.tsx, line 15
- WCAG 2.1 Guidelines
- WebAIM Contrast Checker
- axe DevTools Documentation
- WAVE Documentation
- Screen Reader Testing Guide
After identifying issues:
- Document all findings
- Prioritize by severity (Level A > Level AA)
- Suggest fixes for each issue
- Test fixes to ensure they resolve the problems
- Verify fixes don't introduce new issues