• This repository has been archived on 19/Mar/2021
  • Stars
    star
    1,156
  • Rank 40,363 (Top 0.8 %)
  • Language
    TypeScript
  • License
    Other
  • Created over 8 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[DEPRECATED] Accessibility auditing for React.js applications

[DEPRECATED] react-axe

No Maintenance Intended

This repository has been deprecated. The package has been moved to axe-core-npm. The package will be available via NPM as @axe-core/react.


React-axe

Test your React application with the axe-core accessibility testing library. Results will show in the Chrome DevTools console.

Usage

Greenkeeper badge

Install the module from NPM or elsewhere

npm install --save-dev react-axe

Initialize the module

Call the exported function passing in the React and ReactDOM objects as well as a timing delay in milliseconds that will be observed between each component change and the time the analysis starts.

var React = require('react');
var ReactDOM = require('react-dom');

if (process.env.NODE_ENV !== 'production') {
  var axe = require('react-axe');
  axe(React, ReactDOM, 1000);
}

Be sure to only run the module in your development environment (as shown in the code above) or else your application will use more resources than necessary when in production. You can use envify to do this as is shown in the example.

Once initialized, the module will output accessibility defect information to the Chrome Devtools console every time a component updates.

Deduplicating

react-axe will deduplicate violations using the rule that raised the violation and the CSS selector and the failureSummary of the specific node. This will ensure that each unique issue will only be printed to the console once.

Debouncing

The third argument to the exported function is the number of milliseconds to wait for component updates to cease before performing an analysis of all the changes. The changes will be batched and analyzed from the closest common ancestor of all the components that changed within the batch. This generally leads to the first analysis for a dynamic application, analyzing the entire page (which is what you want), while subsequent updates will only analyze a portion of the page (which is probably also what you want).

Shadow DOM

With version 3.0.0, react-axe now runs accessibility tests inside of open Shadow DOM. You don't have to do anything special other than run react-axe on an component encapsulated with open Shadow DOM (as opposed to closed). For more information, see the axe-core repo.

Configuration

There is a fourth optional argument that is a configuration object for axe-core. Read about the object here: https://github.com/dequelabs/axe-core/blob/master/doc/API.md#api-name-axeconfigure

var config = {
  rules: [
    {
      id: 'skip-link',
      enabled: true
    }
  ]
};

axe(React, ReactDOM, 1000, config);

Axe-core's context object can be given as a fifth optional argument to specify which element should (and which should not) be tested. Read more from the Axe-core documentation: https://github.com/dequelabs/axe-core/blob/master/doc/API.md#context-parameter

var context = {
  include: [['#preview']]
};

axe(React, ReactDOM, 1000, undefined, context);

Run the example

Run a build in the example directory and start a server to see React-aXe in action in the Chrome Devtools console (opens on localhost:8888):

npm install
cd example
npm install
npm install -g http-server
npm start

Run the tests

Install dependencies in the root directory (which also installs them in the example directory) and then run the tests:

npm install
npm test

To debug tests in the Cypress application:

npm run test:debug

Compatibility

react-axe uses advanced console logging features and works best in the Chrome browser, with limited functionality in Safari and Firefox.

Advantages

I have been asked how this is different from modules like react-a11y which test the jsx.

The main difference is that react-axe tests the accessibility of the rendered DOM. This is important because many accessibility issues exist at the intersection of the DOM and the CSS and unless you have a fully rendered DOM, you will get two sorts of inaccuracies:

  1. False negatives because of lacking information. Example is in order to test color contrast you must know the foreground and background colors, and
  2. False positives because the element being evaluated is not in its final state and the information to communicate this to the testing algorithm is not available. Example is an inert piece of code that will be augmented once it becomes active.

If you have nice clean code, number 2 will be negligible but number 1 will always be a concern.

More Repositories

1

axe-core

Accessibility engine for automated Web UI testing
JavaScript
5,844
star
2

axe-core-npm

JavaScript
591
star
3

axe-cli

[Deprecated] A command-line interface for the aXe accessibility testing engine
JavaScript
430
star
4

axe-webdriverjs

Provides a chainable axe API for Selenium's WebDriverJS and automatically injects into all frames.
JavaScript
130
star
5

pattern-library

Deque pattern library
JavaScript
116
star
6

cauldron

TypeScript
90
star
7

axe-core-gems

Ruby integration for axe-core, the accessibility testing engine
Ruby
84
star
8

axe-core-maven-html

Tools for using axe for web accessibility testing with JUnit, Selenium, and Playwright
Java
81
star
9

agnostic-axe

Framework agnostic accessibility reporter, powered by axe-core
JavaScript
80
star
10

ngA11y

Angular accessibility modules
JavaScript
74
star
11

axe-android

WCAG Accessibility compliance library for Android Applications.
Java
65
star
12

axe-puppeteer

[DEPRECATED] Provides a chainable axe API for Puppeteer and automatically injects into all frames.
TypeScript
59
star
13

combobo

Accessible combobox
JavaScript
48
star
14

Deque-University-for-iOS

Accessibility demos and best practices for the iOS platform. Need iOS Accessibility help? Ask us a question by adding an Issue to this repository! Help us build a community of iOS Accessibility experts.
HTML
37
star
15

color-palette

Color Palette Color Contrast Analyzer
JavaScript
35
star
16

workshop

Workshop
JavaScript
27
star
17

Deque-University-for-Android

All you need to improve the Accessibility of your Android Applications in one place! Build the application to see Accessible Examples, check out Attest for debugging tools, or post an Issue to leverage our community of Android Accessibility experts.
Java
27
star
18

puppeteer-devtools

Extended puppeteer methods for getting extension devtools contexts
TypeScript
18
star
19

smashing-workshop

JavaScript
18
star
20

axe-firefox-devtools

Integration of axe-core into the Firefox developer tools
17
star
21

axe-core-nuget

Axe Core integration for C# .NET
C#
17
star
22

foreign-keycloak-wrapper

PGXN PostgreSQL foreign data wrapper for keycloak's REST API
Python
16
star
23

axe-selenium-java

Tools for using aXe for web accessibility testing with JUnit and Selenium.
Java
14
star
24

cauldron-react

TypeScript
14
star
25

grunt-axe-webdriver

JavaScript
12
star
26

axe-rules

The Accessibility Rules for automated testing of HTML-based user interfaces.
12
star
27

axe-selector

TypeScript
10
star
28

axe-matchers

[DEPRECATED] Ruby integration for aXe-core, the accessibility testing engine
Ruby
9
star
29

csun20-aria-menu-button

JavaScript
9
star
30

axrl

Accessibility Reporting Language
JavaScript
9
star
31

corro

A powerful, extensible validation framework for node.js.
JavaScript
8
star
32

axe-linter-action

A GitHub Action to lint for any accessibility issues in your pull requests.
Shell
7
star
33

get-it-right-the-first-time

TypeScript
6
star
34

axe-devtools-android-sample-app

Kotlin
6
star
35

axe-devtools-ios-sample-app

Swift
5
star
36

axe-reporter-earl

[DEPRECATED] A reporter for axe-core.
TypeScript
5
star
37

csun19-tdd-component

Live coding at csun 2019!
JavaScript
5
star
38

action-sync-branches

Creates a sync pull request between two branches
TypeScript
5
star
39

axe

Package for marketing all of our open source projects
4
star
40

axe-devtools-html-api-examples

Library of example projects for axe DevTools HTML api integrations
JavaScript
4
star
41

react-wai-accordion

TypeScript
4
star
42

axe-devtools-ios

Start testing for accessibility in your iOS application today with axe DevTools for iOS. Please refer to the README to get started.
Objective-C
3
star
43

a11y-in-design-and-development

Smashing workshop | Day II | October 4th, 2022
JavaScript
2
star
44

axe-website

Website for axe-core
JavaScript
2
star
45

eslint-config-deque

Our extensible ESLint configuration
JavaScript
2
star
46

monitor-utility

Previously the "Comply custom reporter" from Devservices, now useful for any customer. Allows customers to login via the CLI and fetch detailed data from their Monitor projects.
JavaScript
2
star
47

semantic-pr-title

A GitHub Action to validate pr titles against Conventional Commits
TypeScript
2
star
48

watcher-examples

TypeScript
2
star
49

act-reports-axe

ACT reports for axe-core and axe DevTools
TypeScript
1
star
50

hr-a11y-workshop

JavaScript
1
star
51

element-matches

Element#matches un-prefixer
JavaScript
1
star
52

Form-Personalization

A simple chrome browser extension to support personalization of input forms utilizing the auto complete attribute.
JavaScript
1
star
53

attest-release-scripts

Shell
1
star
54

axe-test-fixtures

Fixtures for testing integrations of axe-core
JavaScript
1
star
55

axe-act-testrunner

Axe-core testrunner using the ACT test case format
JavaScript
1
star
56

iOS-Increase-Contrast

Swift
1
star
57

a11y-metrics-poc

A POC for Deque A11Y Metrics
1
star
58

axeDevToolsMobileTools

Mobile tools to demonstrate REST API's from python
Python
1
star
59

workshop-08-2024

design/dev workshop August 2024
HTML
1
star
60

action-twistlock

A GitHub action for scanning a Docker image with Twistlock
JavaScript
1
star