GH GambleHub

Testing interface availability

1) Why and what we think is "ready"

Accessibility (A11y) is a measurable set of conditions in which a product is equally understood and managed for people with different perceptual and motor traits, devices and contexts. Ready means:
  • WCAG 2 criteria met. 1/2. 2 AA levels for target platforms;
  • the interface is completely passed from the keyboard;
  • correct work with screen readers;
  • contrasts comply with the norms;
  • all states/errors/statuses are available out of sight and without a mouse;
  • localization, RTL, reduce motion and mobile features are taken into account.

2) Testing strategy (pyramid A11y)

1. Autotests/linters (fast coverage of up to 40-60% of problem classes).
2. Manual pattern checking (keyboard, focus, content, logic).
3. Assistive Tech (AT) sessions: screen readers, scaling, color filters.
4. Field tests with users (if possible).

The goal: to catch systemic defects at the component/pattern level so that they do not multiply in features.

3) Checklist of basic checks (quick run)

  • Keyboard: everything is reachable by tab/arrows; the order of focus is logical; there is a trick trap in modals; ESC/Enter/Space are working.
  • The focus indicator is visible in any topic/background.
  • Contrast: text ≥ 4. 5:1 (regular), ≥ 3:1 (large), icons/controls are readable.
  • Semantics: correct tags ('button', 'a', 'label', 'ul/li', 'th/td'), roles and 'aria-' only if necessary.
  • Screen reader: titles by hierarchy, meaningful names of buttons/links, alternatives for icons/images.
  • Forms: explicit 'label', hints/errors are related ('aria-describby'), error texts are specific.
  • Dynamics: Toasts/banners/errors are announced via 'aria-live' ('polite '/' assertive').
  • Animations respect 'prefers-reduced-motion'; without "shaking" the interface.
  • Localization/RTL: key screens are aligned, numbers/dates/currencies are formatted by utilities.
  • Mobility: touch targets ≥ 44 × 44 px, zoom is not prohibited, screen rotation does not break content.

4) Roles, responsibilities and artifacts

Design system: A11y requirements in the description of each component.
Developers: auto-checks, unit/interaction tests with A11y-asserts.
QA: manual scripts + AT sessions; report with severity/frequency.
UX/Content: microcopy of errors/statuses, readability aloud.
Artifacts: checklists, scripts, AT screencasts, list of defects with WCAG references, recommendations.

5) Automated checks

Linters/analyzers: axe, eslint-plugin-jsx-a11y, pa11y, Lighthouse.
In the pipeline: we block PR for critical violations (role/label/contrast/tab traps).
Contrast snapshots: visual tests of themes/states.

💡 Remember: auto tools do not test meaning and do not see focus with their eyes - manual tests are required.

6) Manual testing: scenarios

6. 1 Keyboard

Go through the page only with the keyboard (Tab/Shift + Tab/Enter/Space/arrows).
Check: focus visibility, priority, availability of all actions, absence of "traps" and "dead" elements.
In a modal: focus inside, when closed, returns to the initiator.

6. 2 Screen readers (minimum set)

Desktop: NVDA/JAWS (Windows), VoiceOver (macOS).
Mobile: VoiceOver (iOS), TalkBack (Android).
We check: correct headings (H-hierarchy), names of buttons/links, reading tables ('th '/' scope'), declaring statuses, understandable form errors.

6. 3 Content and microcopy

We read critical texts out loud - without ambiguity, without "error 400."

Error = "what's wrong + how to fix + constraint/format."

6. 4 Dynamics and living regions

The toast of success is' aria-live = "polite" ', the error is' assertive '.
Progress/download explained by text; skeleton is preferred to spinner.

7) Forms and errors (in depth)

Each field has an associated label (not a placeholder).
Errors are associated with the field:' aria-invalid =" true"',' aria-describby =" [error id]"'.
Format formulas (date, phone number) are specified in advance; masks do not break the input/insertion.
Summary banner of errors when submit + auto-scrolling and focus on the first error.
Error texts: specific, without technical jargon.

8) Tables, lists, graphs

Tables: headings' th'with' scope = "col/row" ', signatures, resume.
Lists are real 'ul/ol/li', not divas.
Graphs - alternative tables/descriptions; legends are available; colors ≠ a single signal.

9) Multimedia and animations

Video: subtitles/transcript; keyboard control; without autoplay (or with quiet).
GIF/microanimations: turn off when 'prefers-reduced-motion'; avoiding outbreaks.
Vibrations/sounds - optional and duplicated visually/text.

10) Mobile accessibility

Interactive ≥ 44 × 44 px, sufficient intervals.
Do not prohibit scaling (meta viewport without 'user-scalable = no').
Form/keyboard: correct types ('tel', 'email', 'number'), do not hide system capabilities.

Check in dark theme and with system fonts "more."

11) Localization, numbers and RTL

Strings through i18n keys with context; long languages (DE/TR) do not break the layout.
Date/currency formats - utilities, not strings.
RTL mode: mirror the navigation icons, check the order of focus and carriage, bidirectional input.

12) Specificity of critical flow (iGaming)

Payments/Conclusions

Clear instructions, limits/deadlines/commissions - in text.
Provider errors are declared explicitly, without codes; there is an alternative to action.
Operation confirmation: focus on logical CTA, cancelability.

CCM/verification

Step-by-step tips for photos/documents; progress and ETA.
Blurred/glare/truncated errors - with examples of correction.
Neutral tone, no humor.

13) Defect severity assessment

Blocker: Key task (keyboard/screen reader) cannot be completed.
Critical: critical functionality works, but with serious barriers.
Major: gets in the way, there's a workaround.
Minor: cosmetics/non-compliance with guides without affecting the task.

Each defect is a reference to the WCAG criterion and the script being reproduced.

14) Definition of Done (A11y)

Passing the keyboard script without a mouse is 100%.
axe/Lighthouse: no critical/high violations.
AA contrast across all themes/states.
Screen reader-run of key pathways (navbar, molds, modals, toast).
A11y documentation for new components/features (role model, aria, focus, examples).
Regression of A11y tests green in CI.

15) Processes and automation

Before development: A11y-criteria in tasks, layouts with focus/error states.
In development: linters/ahe during local assembly; visual snapshots of contrast/focus.
In CI: pa11y/axe-scan by critical pages; build drop under Blocker/Critical.
After release: quarterly audits, monitoring of user complaints by A11y-tag.

16) Anti-patterns

Placeholder instead of label.
'div'instead of' button '/' a '.

Disabled focus rings "for the sake of beauty."

Color as the only status carrier.
Modals without focus trap/ESC.
No scaling on mobile.
"Error 400/500" without human explanation.

17) Test script templates

Scenario 1 - Keyboard Navigation (Form Page)

1. Tab to the first field, enter the data.
2. Shift + Tab back - Check the correct order.
3. Call validation (submit) - focus moves to the first error.
4. Close the modulator with the ESC key, focus returned to the initiator.

Scenario 2 - Screen Reader (Payment Page)

1. Go to the page header (h1), listen to the sections.
2. Open the selection of the method - the declaration of roles/states is heard.
3. Deliberately make a sum error - the message is read and associated with the field.
4. Successful payment toast declared 'polite'.

Scenario 3 - Dynamics

1. Start the operation with a wait of> 3 seconds - there is text about the process/ETA.
2. In case of a network error - the 'assertive' banner, accessible from the keyboard, there is a "repeat/help" path.

18) Useful micro-templates

Roles/aria for toast

html
<div role = "status" aria-live = "polite"> Payment accepted. Balance updated. </div>
<div role = "alert" aria-live = "assertive"> The payment was denied. Try another method. </div>

Link error to field

html
<label for = "amount "> Amount </label>
<input id="amount" aria-invalid="true" aria-describedby="amount-error">
<div id = "amount-error "> Minimum 100 UAH. Please enter a larger amount. </div>

Modalka (semantic attributes)

html
<div role="dialog" aria-modal="true" aria-labelledby="m-title">
<h2 id =" m-title "> Confirm Payment </h2>
<! -- content -->
<button> Confirm </button>
<button> Cancel </button>
</div>

19) Quick implementation plan for A11y practices

1. Audit of current components/patterns (contrast/focus/role semantics).
2. Design System Edits: Add an A11y partition to each component.
3. Tools: Set up/axe/pa11y/Lighthouse linters locally and in CI.
4. Training: short guides for designers/developers/copywriters.
5. Pilot: fix 3-5 of the most common defects (modals, forms, toast).
6. Regulation: DoD with A11y criteria; quarterly audit.

Final cheat sheet

Check keyboard, focus, contrasts, screen reader, dynamics.
Announce statuses via aria-live; errors - related to fields.
Respect reduce motion, do not prohibit scaling.

Think semantics (tags/roles), not "what it looks like."

Automate checks, but always supplement with manual ones.
Fix defects with reference to WCAG, severity and playback script.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.