Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

axe-core

dequelabs58mMPL-2.04.10.2TypeScript support: included

Accessibility engine for automated Web UI testing

Accessibility, a11y, testing, unit, tdd, bdd, axe

readme

axe-core

License Version NPM downloads Commits GitHub contributors Join our Slack chat Package Quality

Axe is an accessibility testing engine for websites and other HTML-based user interfaces. It's fast, secure, lightweight, and was built to seamlessly integrate with any existing test environment so you can automate accessibility testing alongside your regular functional testing.

Sign up for axe news to get the latest on axe features, future releases, and events.

The Accessibility Rules

Axe-core has different types of rules, for WCAG 2.0, 2.1, 2.2 on level A, AA and AAA as well as a number of best practices that help you identify common accessibility practices like ensuring every page has an h1 heading, and to help you avoid "gotchas" in ARIA like where an ARIA attribute you used will get ignored. The complete list of rules, grouped WCAG level and best practice, can found in doc/rule-descriptions.md.

With axe-core, you can find on average 57% of WCAG issues automatically. Additionally, axe-core will return elements as "incomplete" where axe-core could not be certain, and manual review is needed.

To catch bugs earlier in the development cycle we recommend using the axe-linter vscode extension. To improve test coverage even further we recommend the intelligent guided tests in the axe Extension.

Getting started

First download the package:

npm install axe-core --save-dev

Now include the javascript file in each of your iframes in your fixtures or test systems:

<script src="node_modules/axe-core/axe.min.js"></script>

Now insert calls at each point in your tests where a new piece of UI becomes visible or exposed:

axe
  .run()
  .then(results => {
    if (results.violations.length) {
      throw new Error('Accessibility issues found');
    }
  })
  .catch(err => {
    console.error('Something bad happened:', err.message);
  });

Philosophy

The web can only become an accessible, inclusive space if developers are empowered to take responsibility for accessibility testing and accessible coding practices.

Automated accessibility testing is a huge timesaver, it doesn't require special expertise, and it allows teams to focus expert resources on the accessibility issues that really need them. Unfortunately, most accessibility tools are meant to be run on sites and applications that have reached the end of the development process and often don't give clear or consistent results, causing frustration and delays just when you thought your product was ready to ship.

Axe was built to reflect how web development actually works. It works with all modern browsers, tools, and testing environments a dev team might use. With axe, accessibility testing can be performed as part of your unit testing, integration testing, browser testing, and any other functional testing your team already performs on a day-to-day basis. Building accessibility testing into the early development process saves time, resources, and all kinds of frustration.

About axe - our Manifesto

  • Axe is open source.
  • It returns zero false positives (bugs notwithstanding).
  • It's designed to work on all modern browsers and with whatever tools, frameworks, libraries and environments you use today.
  • It's actively supported by Deque Systems, a major accessibility vendor.
  • It integrates with your existing functional/acceptance automated tests.
  • It automatically determines which rules to run based on the evaluation context.
  • Axe supports in-memory fixtures, static fixtures, integration tests and iframes of infinite depth.
  • Axe is highly configurable.

Supported Browsers

The axe-core API fully supports the following browsers:

  • Microsoft Edge v40 and above
  • Google Chrome v42 and above
  • Mozilla Firefox v38 and above
  • Apple Safari v7 and above
  • Internet Explorer v11 (DEPRECATED)

Support means that we will fix bugs and attempt to test each browser regularly. Only Chrome and Firefox are currently tested on every pull request.

There is limited support for JSDOM. We will attempt to make all rules compatible with JSDOM but where this is not possible, we recommend turning those rules off. Currently the color-contrast rule is known not to work with JSDOM.

We can only support environments where features are either natively supported or polyfilled correctly. We do not support the deprecated v0 Shadow DOM implementation.

Contents of the API Package

The axe-core API package consists of:

  • axe.js - the JavaScript file that should be included in your web site under test (API)
  • axe.min.js - a minified version of the above file

Localization

Axe can be built using your local language. To do so, a localization file must be added to the ./locales directory. This file must be named in the following manner: <langcode>.json. To build axe using this locale, instead of the default, run axe with the --lang flag, like so:

grunt build --lang=nl

or equivalently:

npm run build -- --lang=nl

This will create a new build for axe, called axe.<lang>.js and axe.<lang>.min.js. If you want to build all localized versions, simply pass in --all-lang instead. If you want to build multiple localized versions (but not all of them), you can pass in a comma-separated list of languages to the --lang flag, like --lang=nl,ja.

To create a new translation for axe, start by running grunt translate --lang=<langcode>. This will create a json file in the ./locales directory, with the default English text in it for you to translate. Alternatively, you could copy ./locales/_template.json. We welcome any localization for axe-core. For details on how to contribute, see the Contributing section below. For details on the message syntax, see Check Message Template.

To update an existing translation file, re-run grunt translate --lang=<langcode>. This will add new messages used in English and remove messages which were not used in English.

Additionally, locale can be applied at runtime by passing a locale object to axe.configure(). The locale object must be of the same shape as existing locales in the ./locales directory. For example:

axe.configure({
  locale: {
    lang: 'de',
    rules: {
      accesskeys: {
        help: 'Der Wert des accesskey-Attributes muss einzigartig sein.'
      }
      // ...
    },
    checks: {
      abstractrole: {
        fail: 'Abstrakte ARIA-Rollen dürfen nicht direkt verwendet werden.'
      },
      'aria-errormessage': {
        // Note: doT (https://github.com/olado/dot) templates are supported here.
        fail: 'Der Wert der aria-errormessage ${data.values}` muss eine Technik verwenden, um die Message anzukündigen (z. B., aria-live, aria-describedby, role=alert, etc.).'
      }
      // ...
    }
  }
});

Supported Locales

Axe-core supports the following locales. Do note that since locales are contributed by our community, they are not guaranteed to include all translations needed in a release.

  • Basque
  • Danish
  • Dutch
  • French
  • German
  • Hebrew
  • Japanese
  • Korean
  • Norwegian (Bokmål)
  • Polish
  • Portuguese (Brazilian)
  • Spanish
  • Greek
  • Italian
  • Simplified Chinese
  • Traditional Chinese

Updates & Security

Axe-core has a new minor release every 3 to 5 months, which usually introduces new rules and features. We recommend scheduling time to upgrade to these versions. Security updates will be made available for minor version lines up to 18 months old.

  • See release and support for details on the frequency of releases, long-term support and recommendations on upgrading axe-core.
  • See backward compatibility for details on the types of changes different releases may introduce.

Deque Trademarks Policy

DEQUE, DEQUELABS, AXE®, and AXE-CORE® are trademarks of Deque Systems, Inc. Use of the Deque trademarks must be in accordance with Deque's trademark policy.

Supported ARIA Roles and Attributes.

Refer axe-core ARIA support for a complete list of ARIA supported roles and attributes by axe.

Contributing

Read the Proposing Axe-core Rules guide

Read the documentation on the architecture

Read the documentation on contributing

Projects using axe-core

List of projects using axe-core

Acknowledgements

Thanks to Marat Dulin for his css-selector-parser implementation which is included for shadow DOM support. Another thank you to the Slick Parser implementers for their contribution, we have used some of their algorithms in our shadow DOM support code. Thanks to Lea Verou and Chris Lilley for their colorjs.io library which we have used for converting between color formats.

Licenses

Axe-core is distributed under the Mozilla Public License, version 2.0. It comes bundled with several dependencies which are distributed under their own terms. (See LICENSE-3RD-PARTY.txt)

changelog

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

4.10.2 (2024-10-21)

Bug Fixes

  • get-ancestry: don't error when there is no parent (#4617) (6c07102)

4.10.1 (2024-10-16)

Bug Fixes

4.10.0 (2024-07-29)

Features

  • new-rule: summary elements must have an accessible name (#4511) (0d8a99e), closes #4510

Bug Fixes

  • aria-allowed-attr: allow aria-multiline=false for element with contenteditable (#4537) (f019068)
  • aria-allowed-attr: allow aria-required=false when normally not allowed (#4532) (2e242e1)
  • aria-prohibited-attr: allow aria-label/ledby on descendants of widget (#4541) (07c5d91)
  • aria-roledescription: keep disabled with { runOnly: 'wcag2a' } (#4526) (5b4cb9d), closes #4523
  • autocomplete-valid: incomplete for invalid but safe values (#4500) (e31a974), closes #4492
  • build: limit locales to valid files when using the --all-lang option (#4486) (d3db593), closes #4485
  • Prevent errors when loading axe in Angular + Jest (#4456) (3ef9353), closes #4400
  • Minor grammatical fixes for some rules and checks (#4499) (11fad59)
  • landmark-unique: follow spec, aside -> landmark (#4469) (e32f803), closes #4460
  • required-attr: allow aria-valuetext on slider instead of valuenow (#4518) (135898b), closes #4515

4.9.1 (2024-05-06)

Bug Fixes

  • Prevent errors when loading axe in a page with prototype.js
  • aria-allowed-attr: allow meter role allowed aria-* attributes on meter element (#4435) (7ac6392)
  • aria-allowed-role: add gridcell, separator, slider and treeitem to allowed roles of button element (#4398) (4788bf8)
  • aria-roles: correct abstract roles (types) for aria-roles(#4421)
  • aria-valid-attr-value: aria-controls & aria-haspopup incomplete (#4418)
  • fix building axe-core translation files with region locales (#4396) (5c318f3), closes #4388
  • invalidrole: allow upper and mixed case role names (#4358) (105016c), closes #2695
  • isVisibleOnScreen: account for position: absolute elements inside overflow container (#4405) (2940f6e), closes #4016
  • label-content-name-mismatch: better dismiss and wysiwyg symbolic text characters (#4402)
  • region: Decorative images ignored by region rule (#4412)
  • target-size: ignore descendant elements in shadow dom (#4410) (6091367)
  • target-size: pass for element that has nearby elements that are obscured (#4422) (3a90bb7), closes #4387

4.9.0 (2024-03-25)

Features

Bug Fixes

  • Add LICENSE-3RD-PARTY.txt file (#4304) (daa0fe6)
  • add Object.values polyfill for node <=6 (#4274) (5eb867b)
  • aria-required-children: avoid confusing aria-busy message in failures (#4347) (591607d), closes #fail13 #4340
  • avoid reading element-specific node properties of non-element node types (#4317) (b853b18), closes #4316 #4316
  • color-contrast: handle text that is outside overflow: hidden ancestor (#4357) (bdb7300), closes #4253
  • color-contrast: support color blend modes hue, saturation, color, luminosity (#4365) (7ae4761)
  • d.ts: RawNodesResult issues (#4229) (d660518)
  • d.ts: RunOptions.reporter can be any string (#4218) (e53f5c5)
  • i18n: update Italian translations (#4377) (4d65d4b)
  • listitem: clarify roleNotValid message (#4374) (0f8a9af)
  • scrollable-region-focusable: missing wcag213 tag (#4201) (0080a72)
  • target-size: always pass 10x targets (avoid perf bottleneck) (#4376) (be327c4)
  • target-size: do not crash for nodes with many overlapping widgets (#4373) (1dbea83), closes #4359 #4359 #4360
  • utils/get-selector: ignore 'xmlns' attribute when generating a selector (#4303) (938b411)

4.8.4 (2024-02-07)

Bug Fixes

  • Add LICENSE-3RD-PARTY.txt file (#4304) (139c553)
  • avoid reading element-specific node properties of non-element node types (#4317) (a2a6935), closes #4316 #4316
  • d.ts: RawNodesResult issues (#4229) (f105266)
  • d.ts: RunOptions.reporter can be any string (#4218) (80de793)
  • utils/get-selector: ignore 'xmlns' attribute when generating a selector (#4303) (8c68546)

4.8.3 (2023-12-18)

Bug Fixes

4.8.2 (2023-09-18)

Bug Fixes

4.8.1 (2023-09-08)

Bug Fixes

  • target-size: show closest offset in message (#4151) (a0882f6)

4.8.0 (2023-09-06)

Consistent Rule Impact

This release changes it so that a rule never changes what impact it reports. To facilitate this while without changing the impact on certain issues, some rules have been split. The following changes were involved:

  • Deprecate impact on checks; use rules instead (#4114) (2cc5547)
  • add rule aria-deprecated-role (#4074) (03f2771)
  • add rule aria-conditional-attr (#4094) (d417630)
  • aria-input/toggle-field-name: set impact always to serious (#4095) (e031d68)
  • aria-prohibited-attr: add rule aria-prohibited-attr (#4088) (7b115d3)
  • impact: aria-roles / aria-valid-attr-value is always "critical" (#4112) (5cc8041)
  • impact: scope-attr-valid is always "moderate" (#4113) (131f552)

Other Features

  • deprecate & disable duplicate-id / duplicate-id-active (#4071) (733c45e)
  • duplicate-id-aria: set to review on fail and tag as wcag412 (#4075) (9f1a3e3)
  • add EN.301.549 tags to rules (#4063) (de3da89)
  • checks: enable help-same-as-label, but remove from rules (#4096) (034038a)
  • new-rule: aria-braille-equivalent finds incorrect uses of aria-braille attributes (#4107) (6260a2f)
  • page-no-duplicate-banner/contentinfo: deprecate options.nativeScopeFilter, take into ancestors with sectioning roles (#4105) (c6e07be)

Type Fixes & Improvements

Various improvements were made to the types. Potentially the most impactful of which is that the target and ancestry property now return as UnlabelledFrameSelector instead of as string[], which is incorrect for selectors involving shadow DOM. This may create some issues during migration for any code that has been incorrectly assuming these two properties have the string[] type. For more details and other type changes, see the commit itself:

Bug Fixes

  • access-name: get name from header elements (#4097) (fbe99bf)
  • add <search> element semantics (#4115) (637bf6c)
  • aria-allowed-attr: pass aria-expanded on checkbox & switch (#4110) (fcf76e0), closes #3339
  • aria-allowed-role: Add doc-glossary to allowed roles for aside element (#4083) (6ca38f6)
  • aria-allowed-role: add meter to allowed roles for named img (#4055) (173f29d), closes #4054
  • aria-required-childen: test visibility of grandchildren (#4091) (a202b69)
  • aria-text: typo in rule description (#4131) (85a0e9c)
  • aria-valid-attr-value: allow empty value on aria-braille* & aria-valuetext (#4109) (c4c3e65)
  • avoid memory issues by doing better cleanup (#4059) (16c5cfa)
  • avoid problems from element IDs that exist on object prototype (#4060) (8d135dd)
  • color-contrast: correctly handle flex and position (#4086) (9d5f496)
  • color-contrast: get text stoke from offset shadows (#4079) (13acffe)
  • color-contrast: ignore format unicode characters (#4102) (049522e)
  • color-contrast: ignore zero width characters (#4103) (4deb0a0)
  • color-contrast: process non-rgb color functions (#4092) (9634282)
  • commons/dom/createGrid: only add the visible, non-overflow areas of an element to the grid (#4101) (d77f47b)
  • ensure reporter errors can propagate (#4111) (080cc1b)
  • ignore stylesheets fetching style tag in jsdom (#4138) (d7c16a4)
  • jsdom: allow axe.setup() without a global window (#4116) (33b0314)
  • target-size: correctly calculate bounding box (#4125) (1494b4c)
  • target-size: update to match new spacing requirements (#4117) (49eaa0e)
  • Use correct copyright year (#4098) (cab6a2b)
  • utils/clone: don't try to clone elements from different window context (#4072) (55000d0)

4.7.2 (2023-05-25)

Bug Fixes

  • aria-allowed-attr: Add 'aria-required' to switch role (#4029) (cb51be4), closes #4027
  • aria-allowed-attr: allow aria-required on role=slider (#4035) (bb2bf60)
  • aria-required-children: set related nodes for invalid children (#4033) (377f72b)
  • tags: Add / correct several TTv5 tags (#4031) (25859dd)

4.7.1 (2023-05-15)

Bug Fixes

  • aria-allowed-attr: no inconsistent aria-checked on HTML checkboxes (#3895) (704043e)
  • aria-allowed-attrs: add aria-expanded to allowed attrs for menuitemcheckbox and menuitemradio (#3994) (0f405c6)
  • aria-required-children: trigger reviewEmpty with hidden children (#4012) (a19b6cb)
  • color-contrast: support CSS 4 color spaces (#4020) (65621c3)
  • link-in-text-block: set links with pseudo-content for review (#4005) (949f4f8)

4.7.0 (2023-04-17)

Features

  • aria-roledescription: deprecate rule (#3948) (1913a9e)
  • aria-roles: deprecate the ARIA directory role (#3952) (893fdd0)
  • d.ts: setup/teardown, reporters & metadata definitions (#3966) (78264ee)
  • deprecate bower (#3889) (651d811)
  • deprecate color.filteredRectStack, color.getRectStack, and dom.visuallyContains (#3859) (3be2bad)
  • dom.focusDisabled,dom.isVisibleForScreenreader: support the inert attribute (#3857) (273c971)
  • metadata: add Trusted Tester tag (#3986) (1f6a2a6)
  • support the dialog element (#3902) (d4522cd)

Bug Fixes

  • aria-allowed-attrs: allow aria-description and aria-braille* attrs (#3956) (2842395)
  • aria-input-field-name: skip combobox popups (#3886) (3dcdd42)
  • aria-required-children: allow separator in menu(bar) (#3868) (ec9f507)
  • aria-required-children: do not fail for children with aria-hidden (#3949) (8714d6b)
  • aria-required-children: list elements that are not allowed (#3951) (cce7586)
  • autocomplete-valid: allow webauthn token (#3866) (fd3010f)
  • color-contrast: correcly apply opacity to foreground color (#3973) (d7db279)
  • color-contrast: correctly calculate contrast of flex/grid items with z-index (#3884) (cef96be)
  • color-contrast: correctly compute background color for elements with opacity (#3944) (c051fe8), closes #3932
  • color-contrast: correctly compute color contrast of <slot> elements (#3847) (4c3a00c)
  • color-contrast: do not check contrast on elemets that are inerted (#3894) (da19946)
  • color-contrast: skip ligature icons (#3867) (9486288)
  • create-grid: correctly compute stack order for non-positioned stacking contexts (#3930) (8db2c24), closes #3932
  • css-orientation-lock: support the css rotate property (#3958) (c51f8bf)
  • focus-order-semantics: Add ARIA role article to list of valid roles for scrollable regions (#3927) (f029271)
  • is-icon-ligature: prevent canvas2d warning willReadFrequently (#3931) (b3c52bb)
  • link-in-text-block: allow links with identical colors (#3861) (5f90040)
  • respondable: work with CDP Page.setDocumentContent (#3921) (66f23e5)
  • scrollable-region-focusable: change impact to serious (#3959) (e3a5c21)
  • scrollable-region-focusable: skip native controls (#3862) (b0bdefa)

4.6.3 (2023-01-23)

Bug Fixes

  • aria-required-children: allow separator in menu(bar) (#3868) (46c9499)
  • autocomplete-valid: allow webauthn token (#3866) (a3d1b9d)
  • color-contrast: correctly compute color contrast of <slot> elements (#3847) (844cea1)
  • color-contrast: skip ligature icons (#3867) (7dfbd9a)
  • link-in-text-block: allow links with identical colors (#3861) (6761f36)
  • scrollable-region-focusable: skip native controls (#3862) (aaf44e9)

4.6.2 (2022-12-23)

Bug Fixes

  • color-contrast: fix color-contrast check when running in an extension (#3838) (31a3e01)

4.6.1 (2022-12-14)

Bug Fixes

  • d.ts: add optional include to ContextObject (#3830) (36ed242)

4.6.0 (2022-12-12)

Features

  • aria-required-attr: require aria-controls on combobox and aria-valuenow on focusable separator (#3786) (5259e88)
  • checks/label-content-name-mismatch: deprecate occuranceThreshold option in favor of occurrenceThreshold to fix typo (#3782) (5026d65)
  • commons: deprecate flattenShadowColors in favor of flattenColors (#3792) (af49daf)
  • context: allow selecting shadow DOM nodes (#3798) (9e1e31b)
  • list,listitem: do not allow group as allowed parent or child (#3784) (d1cbf6f)
  • required-attr: require aria-checked for checkbox-like and radio-like roles (#3785) (563e4e9)
  • utils: new shadowSelectAll utility (#3796) (5865462)

Bug Fixes

  • aria-allowed-role: allow combobox on button, checkbox and combobox on input[type=button] (#3354) (ac688c0), closes #3353
  • aria-required-children: allow menu as child of menu (#3820) (a6569e5)
  • color-contrast: consider -webkit-text-stroke & -webkit-text-fill-color (#3791) (228daf1)
  • color-contrast: correctly calculate background color of text nodes with different size than their container (#3703) (123b83c)
  • get-role: handle presentation role inheritance for vnodes with no parent (#3801) (b971caf)
  • html-lang-valid: only run rule when attribute has value (#3663) (1a7eecb), closes #3624
  • metadata: Map aria-required-children to ACT rule bc4a75 (#3790) (a33a523)

4.5.2 (2022-11-14)

Bug Fixes

  • aria-required-children: allow menu and menubar to be empty (#3770) (d11aed8)
  • create-grid: include elements scrolled out of view in the grid (#3773) (a563263)
  • do not warn when using webpack (#3777) (d6cef9a)
  • link-in-text-block: don't match style or script text (#3775) (ab877f9)
  • prevent undefined relatedNodes from halting axe (#3778) (efefb18)

4.5.1 (2022-11-01)

Bug Fixes

  • allow axe to run in certain configurations of jsdom (#3755) (b74c5d4)
  • prevent crash on jsdom when preloading CSSOM (#3754) (b1f0c6b)

4.5.0 (2022-10-17)

Features

Highlights

  • new rule: Add WCAG 2.2 target-size rule (off by default) (#3616) (691f1b6)
  • new rule: Add meta-refresh-no-exceptions (off by default, wcag2aaa) (#3530) (27031a8)
  • identical-links-same-purpose: Disable by default (wcag2aaa rule) (#3615) (a2c2d2f)
  • link-in-text-block: Remove experimental and enable by default (#3706) (37b6e7a)
  • i18n: Add Norwegian Bokmål locale (#3375) (2886d33)
  • i18n: Add Hebrew translation (#3438) (b4162ed)

Tags and Metadata Updates

Various changes of tags, for greater consistency with ACT Rules.

  • area-alt: Remove the wcag111 tag (#3479) (1c3cc51)
  • aria-hidden-focus: Remove the wcag131 tag (#3477) (36ace76)
  • empty-table-headers: Rule is now best-practice and fails instead of incompletes (#3427) (0a4397d), closes #3404
  • frame-title: Remove wcag241 tag (#3519) (9c6b828)
  • input-image-alt: Add the wcag412 tag (#3478) (34272c6)
  • label,select-name: Remove the sc131 tag (#3476) (7caef89)
  • meta-viewport: Report as violation of wcag 1.4.4 (#3704) (6f7e4a9)
  • metadata: Update ACT tags & actIds (#3498) (571722b)

Deprecations

  • Deprecate Internet Explorer support (#3644) (11f5163)
  • Deprecate sri-history.json file (#3646) (6f6a89e)
  • Deprecate and replace dom.isVisible, utils.isHidden, and dom.isHiddenWithCss (#3351) (1ae2ac0)
  • Deprecate only-dlitems-evaluate & only-listitems-evaluate methods (#3724) (322e9ed)
  • Deprecate presentation-role-conflict-matchess (#3638) (0f02a15)
  • Deprecate is-visible-matches, use is-visible-on-screen-matches (#3679) (738dd8f)
  • Deprecate not-html-matches, use :not(html) instead (#3540) (e0010d9)

Others

  • aria-roles: Permit fallback roles (#3683) (5665260)
  • aria-required-children: Allow aria-busy on children (#3569) (3618f50)
  • aria-required-children: Fail for children which are not listed as required (#3597) (b5ceabc)
  • getRules: Return actIds when set (#3470) (a3d5cef)
  • is-in-tab-order: Add isInTabOrder to commons (#3619) (77afe90), closes #3500
  • list/definition-list: Only allow required owned roles (#3707) (a920d35)
  • presentation-role-conflict: Test img elements with empty alt (#3717) (ea32fa7)

Bug Fixes

  • utils: greatly improve the speed of querySelectorAll (#3423) (1cae5ea)
  • aria-hidden-focus: Do not fail for focus trap bumper elements (#3667) (46b6658)
  • aria-required-attr: aria-valuenow is no longer required for spinbutton (#3552) (a22cf56)
  • aria-required-parent: Allow nested group and presentational roles (#3492) (4685270)
  • aria-valid-attr-value: Report empty values as incomplete (#3635) (fff39db)
  • avoid-inline-spacing: Add spacing threshold (#3533) (92add05)
  • checks/no-focusable-disable: Don't count non-disableable elements as disabled (#3393) (bb8b5ca), closes #2466 #2934 #2934 #3315
  • checks/unsupportedrole: Support unsupported dpub and fallback roles, add role to message (#3395) (3c0f10f), closes #2466 #2934 #2934 #3282
  • color-contrast-enhanced: Avoid duplicates between color-contrast and color-contrast-enhanced (#3714) (2811f77)
  • color-contrast: Correctly determine color contrast for element that exactly overlaps midpoint of node (#3565) (90de9aa)
  • frame-focusable-content: don't fail for elements with negative tabindex (#3493) (94e75ac)
  • frame-title-unique: Make frame-title-unique reviewOnly and WCAG412 (#3610) (8401b8e), closes #3487
  • frame-title: ignore frames with negative tabindex (f61f825)
  • frame-title: return incomplete for presentational iframe with empty title (#3594) (c2cfd84)
  • is-hidden-for-everyone: count elements inside closed details as hidden (#3726) (e65e962)
  • is-hidden-for-everyone: support content-visibility: hidden (#3690) (95cf6e7)
  • is-visible-on-screen: ignore elements hidden by overflow:hidden (#3676) (2935950)
  • label: avoid passing labels because of an input[value] (#3688) (54a8116)
  • link-in-text-block: Update rule to match current guidance, revise tests (#3575) (edb88ed)
  • meta-refresh: Add WCAG's 20-hour exception (#3525) (5beb6c3)
  • no-autoplay-audio: add reviewOnFail and update tests (#3557) (60ec997)
  • object-alt: ignore unloaded objects (#3680) (8e03e2c)
  • page-has-heading-one,landmark-one-main: do not fail if modal is open (#3501) (c6af316)
  • td-headers-attr: ignore hidden cells with headers attr (#3684) (e0403f4)
  • td-headers-attr: ignore table elements with their role changed (#3687) (902d07c)
  • utils.matches: fix attribute exists selector to match empty attributes (#3669) (4b768ea)
  • valid-lang: ignore lang on elements with no text (#3523) (fd85f39)
  • valid-lang: run on aria-hidden text (#3634) (a0860bd)
  • video-caption: remove excludeHidden: false (#3554) (a3e4bbe)

4.4.3 (2022-07-13)

Bug Fixes

4.4.2 (2022-05-12)

Bug Fixes

  • aria-hidden-focusable: report incomplete with onfocus (#3407) (6755e89)
  • aria-hidden-focus: Update rule help & description (#3422) (7cfb4b1)
  • aria-valid-attr-value: add note about element id being in a different shadow DOM tree (#3421) (24f74df)
  • color-contrast: consistently return color contrast information in the data object for pseudo elements (#3453) (1a9d95e)
  • deprecatedrole,color-contrast: fix message to properly include deprecated role, improve color-contrast pass messages (#3387) (650e503)
  • html-elms: update role allowances for nav element (#3402) (8aa816a), closes #3401
  • standards: fix address typo in html-elms.js (#3418) (f235cc7), closes #3417

4.4.1 (2022-02-03)

Bug Fixes

  • DPUB: deprecate endnote, rather than endnotes (plural) (#3373) (1ba9917)
  • d.ts: correct getFrameContexts return type (#3370) (a1b9611)

4.4.0 (2022-01-26)

Features

  • add new ARIA roles (#3138) (61be7e5)
  • aria-allowed-attr: report violation for non-global ARIA attrs on element without role (#3342) (fb5d990)
  • aria-allowed-attr: report violations for non-global ARIA attributes on elements without a role (#3102) (87cfc0b)
  • color-contrast: add support for CSS mix-blend-mode (#3226) (d497f40)
  • commons: deprecate shadowElementsFromPoint (#3311) (c3a7d16)
  • configure: Deprecate branding: Object, use a string instead. (#3278) (1f01309)
  • dpub: upgrade to DPUB 1.1 and report deprecated roles (#3280) (034a846)
  • options: make axe.ping configurable with pingWaitTime (#3273) (ce4dfaf)
  • rule: add new color-contrast-enhanced rule (WCAG AAA) (#3235) (bec20fc), closes #2934

Bug Fixes

  • allowed-role: area without href can have a button or link role (#3275) (bf7e60a)
  • aria-allowed-attr: check for invalid aria-attributes for role="row" (#3160) (cfa900d)
  • aria-allowed-attr: revert violation for non-global ARIA attrs on element without role (#3243) (112b960)
  • aria-allowed-children,aria-allowed-parent: allow group role in listbox (#3195) (cb01975)
  • aria-allowed-role: allow title, aria-label and aria-labelledby on a img element with a supported role (#3224) (006a681)
  • aria-allowed-role: landmark roles banner on header and contentinfo on footer to only report on top-level rule (#3142) (1fd4b00)
  • aria-allowed-roles: allow role=radio on img with non-empty name (#3320) (accafdf)
  • aria-allowed-roles: update role allowances for section element (#3238) (99676ec), closes #3237
  • aria-allowed-role: Update allowed roles based on ARIA spec updates (#3124) (00f6efc)
  • aria-allowed-role: updates the allowed roles for the wbr element to none and presentation (#3192) (2f439b3), closes #3177
  • aria-prohibited-attr: update metadata message (#3206) (d1a768e)
  • autocomplete-valid: Allow custom autocomplete attribute values (#3225) (6076ee8)
  • axe.configure: do not remove newline characters from locale doT strings (#3216) (ea2ce17)
  • axe.d.ts: allow Node for include/exclude object (#3338) (e699939)
  • axe.run: add option to increase iframe ping timeout (#3233) (ec937e3)
  • check for hidden elements on aria-errormessage (#3156) (95d37dd)
  • color-contrast: account for 0 width scroll regions with children (#3172) (5908f0d)
  • color-contrast: account for elements that do not fill entire bounding size (#3186) (699697b)
  • color-contrast: check bg on fg contrast for thin text-shadows (#3350) (d92a7e5)
  • color-contrast: correctly apply page background color (#3207) (fbc581d)
  • color-contrast: correctly compute color-contrast of truncated children (#3203) (ac7b2b5)
  • color-contrast: correctly handle nested scroll regions (#3212) (22db29c)
  • color-contrast: correctly work with positioned elements without z-index (#3209) (725a20c)
  • color-contrast: inconsistency of bgOverlap message based on scroll (#3310) (25eff98)
  • color-contrast: properly blend multiple alpha colors (#3193) (e930a70)
  • core: Incomplete fallback was missing, and could cause infinite loop (#3302) (f23d8c8)
  • custom-elms: Don't error on custom Element.children prop (#3326) (2ad92f6)
  • d.ts: Add PartialResults type (#3126) (544b6d5)
  • get-selector: do not URL encode or token escape attribute selectors (#3215) (6f7e183)
  • getFrameContext: option.iframe=false always returns an empty array (#3279) (dfa9725)
  • greater consistency of help / description text (#3204) (0677565)
  • is-visible: do not error if window.Node does not exist (#3168) (4046087)
  • jsdoc: typo Sting -> String (d1cc205)
  • label-content-name-mismatch: account for formatting elements (#3349) (53a6684)
  • label-title-only: allow hidden labels (#3183) (cad3994)
  • listitem: allow as child of menu (#3286) (4bf7d35)
  • nativeSelectValue: update selected value on change (#3154) (1ee88cb)
  • nested-interactive/aria-text: allow "tabindex=-1" on elements with no role (#3165) (0ddc00b), closes #2466 #2934 #2934
  • nested-interactive: add focusable descendants as related nodes (#3261) (3b2fdda)
  • nested-interactive: add message for negative tabindex (#3194) (b445291), closes #2466 #2934 /github.com/dequelabs/axe-core/issues/3163#issuecomment-949804464
  • nested-interactive: update negative tabindex message to include asssistive technologies (#3262) (b985776)
  • p-as-heading: p-as-heading rule to account for textContent length (#3145) (400a230)
  • prohibited-attr: always report incomplete if there is text in the subtree (#3347) (2e27dca)
  • region: Allow skip menu buttons (#3277) (6b6f2e3)
  • remove optional crypto dependency (webpack compatibility) (#3358) (aa9d095)
  • reporter: Run inside isolated contexts (#3129) (afe6675)
  • respondable: avoid crashes if the data in window.postMessage is null (#3249) (b37b2f6)
  • scrollable-region-focusable: treat overflow:clip as hidden (#3304) (ef45377)
  • Separate Level AAA rules from A and best-practices (#3191) (828e526)
  • skip-link: work with absolute and relative paths (#2875) (ee49d3e)
  • typescript: allow passing a NodeList to ElementContext (#3161) (ad4b165)

4.3.5 (2021-10-29)

Bug Fixes

  • aria-allowed-attr: revert violation for non-global ARIA attrs on element without role (#3243) (e138fd6)

4.3.4 (2021-10-22)

Bug Fixes

  • aria-allowed-attr: check for invalid aria-attributes for role="row" (#3160) (76aa5ec)
  • aria-allowed-children,aria-allowed-parent: allow group role in listbox (#3195) (d742b29)
  • aria-allowed-role: updates the allowed roles for the wbr element to none and presentation (#3192) (66db765), closes #3177
  • aria-prohibited-attr: update metadata message (#3206) (f9cf9fa)
  • axe.configure: do not remove newline characters from locale doT strings (#3216) (5925898)
  • axe.run: add option to increase iframe ping timeout (#3233) (023f356)
  • color-contrast: account for 0 width scroll regions with children (#3172) (ac913a1)
  • color-contrast: account for elements that do not fill entire bounding size (#3186) (84229d4)
  • color-contrast: correctly apply page background color (#3207) (0ea7e1b)
  • color-contrast: correctly compute color-contrast of truncated children (#3203) (4adb911)
  • color-contrast: correctly handle nested scroll regions (#3212) (80d91c0)
  • color-contrast: correctly work with positioned elements without z-index (#3209) (0322070)
  • greater consistency of help / description text (#3204) (0be12e6)
  • Separate Level AAA rules from A and best-practices (#3191) (7e6e6da)
  • color-contrast: properly blend multiple alpha colors (#3193) (5aa0441)
  • is-visible: do not error if window.Node does not exist (#3168) (cf58aea)
  • label-title-only: allow hidden labels (#3183) (ab636ef)
  • nativeSelectValue: update selected value on change (#3154) (ad584a1)
  • p-as-heading: p-as-heading rule to account for textContent length (#3145) (e0d4dc6)
  • typescript: allow passing a NodeList to ElementContext (#3161) (5f2e517)
  • check for hidden elements on aria-errormessage (#3156) (69b2e33)

4.3.3 (2021-08-24)

Bug Fixes

  • aria-allowed-role: Update allowed roles based on ARIA spec updates (#3124) (a1f637f)
  • d.ts: Add PartialResults type (#3126) (5cdaf01)
  • reporter: Run inside isolated contexts (#3129) (98066f8)

4.3.2 (2021-07-27)

Bug Fixes

  • aria-hidden-focusable: disabled aria-hidden fieldset should not have focusable children (#3056) (0865bd7)
  • aria-required-attr: only require aria-controls if aria-expanded=true (#3089) (63b6c7b)
  • aria-required-parent: Filter out group from required parent roles if group is present (#3084) (1cb270c)
  • axe.d.ts: fix finishRun types (#3098) (e79c65c)
  • color-contrast: check for size before ignoring pseudo elements (#3097) (e0f6c0c)
  • core: stop mutating Context's input (#3076) (5dc34ee)
  • finishRun: handle null for failed iframe results (#3096) (8947099)
  • run,finishRun: don't mutate options, set default reporter to v1 (#3088) (90f0b27)

4.3.1 (2021-07-13)

Bug Fixes

4.3.0 (2021-07-09)

Features

  • options: accept a string for options.runOnly (4392bc0)
  • runPartial: Test without frame communication (#3006) (42738b5)
  • utils: add getFrameContexts method (#2995) (f478bab)
  • deprecate autocomplete appropriate check (#2917) (1fe1487)
  • Remove deprecated phantomjs example (#2913) (4a01ffe)
  • Support multiple languages at once in builds (#2994) (f18a56b)
  • rule: add ACT Rule IDs to test rule objects (#2866) (cc1ebf5), closes #2820

Bug Fixes

  • accText: ignore text in embedded content elements (#3022) (fa4f926), closes #3017
  • aria-allowed-attr: allow aria-posinset and aria-setsize on row elements for treegrids (#2952) (24e6115)
  • aria-allowed-attr: pass aria-label on some HTML elements (#2935) (d2584ed)
  • aria-level: New check for aria-level > 6 as needs review (#3061) (73d3ae1)
  • aria-roles: Mark as needs review if both none and presentation are used on element with no implicit role (#2989) (70c683c)
  • autocomplete-appropriate: pass for autocomplete=username and type=email (#2896) (43394bc)
  • color-contrast: add special case for new sr-only technique (#2985) (d6a72f9)
  • color-contrast: check for pseudo elements on element itself, not just parents (#2980) (9b6ccd0)
  • color-contrast-matches: only absolutely positioned elements using clip should be not visible (#3038) (e93fdb1)
  • combobox: support aria 1.2 pattern for comboboxes (#3033) (5ab026d)
  • frame-tested: run without respondable (#2942) (c046114)
  • getStandards: Read standards from utils (#2903) (f1a0368)
  • heading-order: Prevent crash on page with iframes but no headings (#2965) (99e7f0c)
  • heading-order: use aria-level on headings in addition to role=header elements (#3028) (caccd38)
  • page-no-duplicate: don't count elements hidden from screenreaders as potential duplicates (#3051) (5e0098b)
  • publish-metadata: use fail message for rules with reviewOnFail:true (#2987) (b6dc5f6)
  • utils: unify selecting nodes in shadow tree with shadowSelect() (#3068) (21681da)
  • JS error in @axe-core/react caused by stale reference to heading (b7094c8)
  • Remove unnecessary files from npm package (#3054) (7600b7c)
  • meta-viewport: test that a user-scalable number does not prevent zoom (b3562fb)
  • region: contents in iframes should pass the region rule if the iframe itself is in a region (#2949) (43145d6)
  • required-parent: Allow *item > group > *item nesting (#2898) (59b4a7e)
  • SerialVirtualNode: properly handle empty string attributes (#3042) (dddbc0a)
  • sri-history: add backported releases (#3004) (6eecf34)
  • treat input with no role as textbox (#2929) (13d909d)
  • types: make evaluate check optional (#2902) (417f572)

4.2.4 (2021-10-22)

Bug Fixes

  • axe.run: add option to increase iframe ping timeout (#3233) (99a848e)

4.2.3 (2021-06-22)

Bug Fixes

  • accText: ignore text in embedded content elements (#3022) (8fb4635), closes #3017
  • color-contrast: add special case for new sr-only technique (#2985) (79cbf01)
  • color-contrast: check for pseudo elements on element itself, not just parents (#2980) (3122550)
  • frame-tested: run without respondable (#2942) (a1d725d)
  • publish-metadata: use fail message for rules with reviewOnFail:true (#2987) (00fefa9)
  • sri-history: add backported releases (#3004) (0332e80)

4.2.2 (2021-06-03)

Bug Fixes

  • aria-allowed-attr: allow aria-posinset and aria-setsize on row elements for treegrids (#2952) (3023e69)
  • heading-order: Prevent crash on page with iframes but no headings (#2965) (4b7db37)
  • meta-viewport: test that a user-scalable number does not prevent zoom (048c5c1)
  • JS error in @axe-core/react caused by stale reference to heading (3afda4e)

4.2.1 (2021-05-18)

Bug Fixes

  • aria-allowed-attr: pass aria-label on some HTML elements (#2935) (695aa77)
  • treat input with no role as textbox (#2929) (de18030)
  • autocomplete-appropriate: pass for autocomplete=username and type=email (#2896) (8b478c8)
  • getStandards: Read standards from utils (#2903) (52ad4c6)
  • required-parent: Allow *item > group > *item nesting (#2898) (3acd229)
  • types: make evaluate check optional (#2902) (75fabfe)

4.2.0 (2021-04-23)

Features

  • add axe.frameMessenger with configurable allowedOrigins (#2880) (b27bab3)
  • aria-allowed-attr: add ARIA 1.2 prohibited attrs check (#2764) (4a77e88)
  • empty-table-header: new rule to flag empty table headers (#2811) (813ee7e)
  • frame-focusable-content: new rule to test iframes with tabindex=-1 do not have focusable content (#2785) (aeb044c)
  • locale: missing translations for DE (#2704) (f312994)
  • locale: Polish translation (#2677) (c46979f)
  • nested-interactive: new rule to flag nested interactive elements (#2691) (13a7cf1)
  • role-text: add role-text rule (#2702) (7c05162)
  • setup/teardown: add functions to setup and teardown axe-core internal data, deprecate axe._tree (#2738) (9d19f24)
  • standards: add graphics roles (#2761) (22032cc)
  • standards/aria-roles: add presentational children property (#2689) (78c239c)
  • utils.getRule: add function to get rule by id (#2724) (9d0af53)
  • utils/matches: support selectors level 4 :not and :is (#2742) (21d9b0e)
  • virtual-node: add attrNames property which returns list of attribute names (#2741) (1d864b4)

Bug Fixes

  • aria-allowed-attr: error when generic elements use aria-label and aria-labelledy (#2766) (64379e1)
  • aria-required-children: allow group and rowgroup roles (#2661) (5a264e4)
  • aria-required-children: only match for roles that require children (#2703) (95de169)
  • aria-valid-attr-value: pass for aria-errormessage when aria-invalid is not set or false (#2721) (93a765c)
  • aria-valid-attr-value: report when aria-labelledby ref is not in DOM (#2723) (116eb06)
  • aria-valid-attr-value: return false when int type attribute uses invalid values (#2710) (ce9917e)
  • bypass: mark as needs review rather than failure (#2818) (bb41b3e)
  • focus-order-semantics: allow role=tooltip to pass (#2871) (dc526d8)
  • heading-order: handle iframe as first result (#2876) (33428d8)
  • respondable: Avoid message duplication with messageId (#2816) (4bd0acf)
  • respondable: work on iframes in shadow DOM (#2857) (38cad94)
  • avoid 'undefined' showing in check messages (#2779) (3beb0b1)
  • properly translate checks when building axe.js using --lang (#2848) (76545b0)
  • aria-required-parent: only match for roles that require parents (#2707) (ce8281e)
  • color-contrast: account for text client rects that start outside the parent container (#2682) (a4e4a34)
  • color-contrast-matches: do not pass empty string to getElementById (#2739) (0b0fec2)
  • frame-title: update rule description to be more descriptive (#2735) (159e25b)
  • heading-order: allow partial context to pass (#2622) (f8baee6)
  • landmark-complementary-is-top-level: allow aside inside main (#2740) (9388c96)
  • metadata: consistenct use of 'must' and 'should' (#2770) (603b612)
  • region: allow role=alertdialog as region (#2660) (b928df7)
  • select-name: fix typo in accessible name help (#2676) (6b916b9)
  • to-grid/get-headers: work with rowspan=0 (#2722) (508190b)
  • types: Add noHtml option (#2810) (c03c826)
  • utils: fix warning thrown by Webpack (#2843) (0826177), closes #2840
  • utils: remove attributes from source string (#2803) (8e8c4fa)
  • add noHtml to axe.configure (#2789) (5c8dec8)
  • do not allow postMessage with axe version of x.y.z (#2790) (5acda82)

4.1.4 (2021-04-01)

Bug Fixes

4.1.3 (2021-03-04)

Bug Fixes

4.1.2 (2021-02-08)

Bug Fixes

4.1.1 (2020-11-19)

Bug Fixes

  • remove axios import (#2653) (2d20cde)
  • color-contrast: greatly improve color-contrast-matches speed. add aria/get-accessible-ref (#2635) (ba174bd)

4.1.0 (2020-11-13)

Features

  • new-rule: check that treeitem role has an accessible name (#2615) (5e95153)
  • Add aria-dialog-name (#2609) (b0e14b0)
  • aria-toggle-field-name: add option role (#2605) (0af0551)
  • checks: deprecate role-none and role-presentation for presentational-role (#2503) (cef54a0)
  • get-role: add noPresentational option (#2549) (4f39299), closes #1792
  • imports: deprecate axios (#2542) (82d43a0)
  • label,select-name: allow placeholder to pass label rule, add select-name rule (#2448) (1315f8e)
  • new-rule: ARIA links, buttons, menuitems have an accessible name (#2571) (9476a1f)
  • new-rule: aria-tooltip-name (#2548) (d00f378)
  • new-rule: check that meter role has an accessible name (#2607) (3ca2f04)
  • new-rule: check that progressbars have an accessible name (#2555) (dd0b44a)
  • presentation-role-conflict: create rule to flag elements with role conflict resolution (#2440) (e4edffc)
  • rule-matches: depreacte window-is-top-matches for is-intiator-matches (#2531) (db2be93)
  • standards: add superclassRole to ariaRoles (#2600) (a5e9ce0)
  • standards: add superclassRole to dpubRoles (#2606) (1b66930)
  • utils: deprecate get/set-scroll-state (#2581) (3c4827f)
  • valid-langs: deprecate validLangs, add isValidLangs, reduce file size (#2527) (8a699ec)

Bug Fixes

  • commons/get-text-element-stack: account for newline characters when text is larger than container (#2631) (3c2429b)
  • Update ACT rule tags (#2625) (c640d4f)
  • aria-errormessage: allow aria-live="polite" on aria-errormessage target (926b6a8)
  • aria-errormessage: allow aria-live=polite on aria-errormessage target (#2597) (0d5cfb1)
  • aria-roles: add group to menuitemradio context (#2518) (52b89f1)
  • aria-roles: Add WAI-ARIA 1.2 roles (#2544) (635b084), closes #2107 #2107 #2107 #2107
  • attr-non-space-content-evaluate: Split no attribute and empty attribute message (#2495) (5f822f4)
  • audit: updated axe.reset() to reset branding, application, and tagExcludes. (#2537) (828864b)
  • autocomplete-valid: allow type=tel for appropriate cc types (#2575) (ae21713)
  • checks/aria: Mark elements missing from aria-errormessage for review (#2550) (8f9a035), closes #2460
  • color-contrast: allow small text shadows to serve as text outline (#2627) (432e1f3)
  • color-contrast: mark elements with pseudo content as needs review (#2613) (fcdbdbc)
  • color-contrast: properly handle scrolling text (#2619) (984e7e2)
  • docs/rules: add missing category tags to rules metadata (#2569) (285c442), closes #2554
  • explicit-label: work with multiple labels (#2573) (d26f106)
  • get-headers: fix for rowspan and colspan (#2545) (3f02d14)
  • heading-order: evaluate headings from iframes in DOM order (#2572) (46f6628)
  • implilcit-role: use type property instead of attribute to resolve input role (#2547) (35e853d), closes #2514
  • link-name: pass landmark content as link text (#2617) (e77992e)
  • name-rules: ignore when explicit roles don't require a name (#2629) (52fb138)
  • region: allow role=dialog and svg elements outside regions (#2586) (fab58d4)
  • region: treat iframes as regions (#2614) (936db81)
  • rule: add check node to the check result object (#2608) (b188911)
  • scrollable-region-focusalbe: do not fail for combobox pattern (#2601) (ac71a57)
  • deprecate aria-form-field-name-matches for no-name-method-matches (#2584) (8be89e3)
  • do not allow fallback content for objects (#2525) (486eafe)

4.0.2 (2020-09-08)

Bug Fixes

  • color-contrast: dont error for floating element (#2444) (45eb746)
  • i18n: proofreading of the french translations (#2485) (ebd0407), closes #2484
  • implicit-role: return gridcell for td child of grid or treegrid (#2501) (0553d4d)
  • label: pass when role none or presentation (#2464) (1d3c2fc), closes #2458
  • link-name: fix regression where link was not named from title attribute (#2492) (b86c73b)
  • required-parent: fail if intermediate role is not the required parent (#2494) (522865c)
  • svg-non-empty-title: update fail message to indicate if the title element is empty or missing (#2462) (9598656), closes #2452
  • valid-lang: fail when lang attribute contains only whitespace (#2504) (8455a7f)

4.0.1 (2020-08-04)

Bug Fixes

  • checks: do not normalize options for custom checks (#2435) (83056ad)

4.0.0 (2020-07-28)

Breaking Changes

The following rules were deprecated in axe-core 3.x, and are removed in 4.0:

  • aria-dpub-role-fallback
  • checkboxgroup
  • layout-table
  • radiogroup
  • video-description

The following checks were deprecated in axe-core 3.x, and are removed in 4.0:

  • aria/implicit-role-fallback
  • forms/fieldset
  • forms/group-labelledby
  • media/description
  • tables/has-caption
  • tables/has-summary
  • tables/has-th

Features

  • add layout-table-matches method (#2400) (d7ba70f)
  • aria/get-roles-by-type: deprecate in favor of standards/get-aria-roles-by-type (#2362) (c0c37ea)
  • aria/lookupTable, aria-allowed-attr: deprecate aria.lookupTable and passing allowed attributes to aria-allowed-attr (#2395) (739d1b1)
  • avoid-inline-spacing: add option for which css properties to look at (#2244) (93c027a)
  • checks: normalize check options to alway be an object (#2219) (da12da7)
  • checks,rules: remove deprecated checks and rules (#2214) (317545a)
  • closest: VirtualNode implementation of Element.closest. Deprecate commons.dom.findUp and commons.dom.findUpVirtual (#2139) (493dd22)
  • color-contrast, utils: add more options to color-contrast, add utils.deepMerge, deprecate commons.color.hasValidContrastRatio (#2256) (49fdb46)
  • commons/aria: deprecate getRole({ noImplicit }) for getExplicitRole() (#2294) (a2873ea)
  • commons/standards: create the commons/standards object for helper functions against the standards table (#2358) (6dce974)
  • duplicate-img-label: add option for parentSelector (#2216) (8906806)
  • get-role: add presentation role resolution and inheritance (#2281) (e207190)
  • get-role: work with standards object (#2367) (1b20faf)
  • globals: deduce required window and document globals from context (#2308) (61bac69)
  • has-descendant, page-no-duplicate: move page-has-elm and page-no-duplicate to generic check (#2229) (59125a0)
  • has-lang: add option for which attributes to look at (#2239) (e69c46a)
  • has-text-content: add generic check has-text-content (#2234) (60ddc65)
  • i18n: add Basque (eu) translation (#1964) (176cf82)
  • matcher: allow regex string to be parsed as regex (#2324) (321b2d1)
  • matches: add explicitRole, implicitRole, and semanticRole matches functions (#2286) (30efbff)
  • matches-definition: add generic check matches-definition (#2233) (20467aa)
  • metadata-function-map: add metadata function map to support check evaulate functions as an id string (#2162) (ec9b931)
  • non-space-content: switch all non-empty checks to new generic check (#2215) (7ce7b00)
  • object-alt,accessible-text: object-alt rule and accessible text to work with serial virtual nodes with children (e8e17e4)
  • options: add ancestry CSS selector to nodes (#2389) (f2cccf5)
  • region: add option to match nodes as region (#2249) (b544554)
  • required-attrs: deprecate options to pass more required attrs (797ee34)
  • rule: add reviewOnFail option to have rule return as needs review instead of violation (#2235) (bb72acd)
  • rule: optional impact on rules (#2393) (e48c1eb)
  • scope-value: add options for valid scope values (#2245) (44269ec)
  • standards: add ariaRoles standard (#2328) (70efbc0)
  • standards: add dpub-roles spec (#2332) (7ec3185)
  • standards: add get-aria-roles-supporting-name-from-content and deprecate aria/get-roles-with-name-from-content (#2363) (240b528)
  • standards: add get-elements-by-content-type and implicit-html-roles (#2375) (f1e0848)
  • add "ACT" tag for published W3C ACT rules (#2382) (cf11b64)
  • standards: add html-elms spec (#2333) (1d6a888)
  • standards: create standards object and ariaAttrs (#2315) (48610de)
  • utils.getFlattenTree: default to documentElement (#2260) (8b14ccc)
  • valid-lang: add option for which attributes to look at (#2240) (ffee19e)
  • update SC tags for label rule (#2037) (c7113fc)

Bug Fixes

  • accessible-name-virtual: allow subtree text to work with virtual and serial nodes (#2346) (67d2dca)
  • api: correct use of rules property in axe.run (#2278) (1fd9e11)
  • aria-allowed-attr: Add aria-orientation to radiogroup role (#2322) (5e1f922)
  • aria-allowed-attr: allow aria-activedescendant on role=application (#2304) (2554f5c)
  • aria-allowed-role: Add fieldset to allowed elements for radiogroup (#2326) (a5409d4)
  • aria-allowed-role: allow role=presentation on hr (#2300) (b524ea9)
  • aria-lablledby: work with virtual and serial virtual nodes (#2341) (c1f3db7)
  • aria-toggle-field-name: work with virtual nodes (#2353) (e5fb01e)
  • aria/allowed-attr: work with standards object (#2360) (40397f5)
  • aria/get-role-type: work with standards object (#2361) (a61e314)
  • autocomplete: allow all 'tel-*' autocomplete values on type=tel (#2307) (58c8175)
  • button-name: work with serial virtual node (#2351) (efa0e56)
  • bypass: find headings in iframes (#2310) (7c23dbd)
  • color: allow all valid CSS colors (#2381) (63d69ea)
  • color-contrast: account for text-shadow (#2334) (3eb6d2c)
  • color-contrast: ignore aria-disabled labels (#2130) (e451b87)
  • color-contrast: properly handle truncated text (#2302) (a56190c)
  • dlitem: allow role=presentation on parent dl (#2301) (9857978)
  • focusable-no-name: work with serial virtual nodes (#2399) (1ef3066)
  • forms/*: allow all form control value checks to work with virtual nodes (#2343) (8ad41af)
  • header-present: fail for headings with non-header role (#2306) (b8ffb39)
  • html-namespace-matches: work with serial virtual nodes (#2398) (18c22fd)
  • implicit-roles: add proper implicit role calculation (#2242) (e9dd259)
  • input-button-name: work with virtual nodes (#2352) (63ca388)
  • is-valid-autocomplete: allow autocomplete="one-time-code" (#2336) (638346f)
  • label: work with virtual nodes (#2354) (44b033c)
  • page-has-h1: allow aria-level=1 on native headings (#2349) (70b10b2)
  • rule: allow impact to be configured (#2426) (f325c75)
  • rule,check: allow function ids for matches property in rule.configure (#2423) (3ccb781)
  • run: cleanup globals if set from context (#2387) (d5b6931)
  • svg-image-alt: work with serial virtual nodes (#2397) (e2537ef)
  • types: Allow impact to be null (#2321) (757aacd), closes #2313
  • types: Make any tag allowed (#2314) (5d98a04), closes #2312
  • typings: update types file (#2425) (0aab922)
  • virtual-node: default and lowercase type property (#2350) (f6b3484)
  • ensure correctly generated axe is required by aria-supported build step (#2295) (1414a9f)
  • aria-required-attr: pass aria-checked for elements with checked property (#2226) (64318a5)
  • axe.d.ts: add element to NodeResults (#2211) (2429355)
  • color-contrast: mark more punctutions for review (#2126) (dc98afc)
  • duplicate-id: list the duplicate id in message (#2163) (f5d4ff9)
  • required-children: consider overriding descendant role(s)… (#2131) (e1c11dd)
  • scrollable-region-focusable: pass for elements with contenteditable (#2133) (1012dfe)
  • th-has-data-cells: fail when only cell points to different header (2d420c3)
  • types: Add "wcag21aa" and "wcag21a" to our TS definition (#2272) (23674d4)
  • types: Add missing properties to Spec (#2273) (c39ba9f)

3.5.5 (2020-06-16)

Bug Fixes

  • aria-input-field-name: add the missing word must to help metadata (b0f5562)
  • color-contrast: fix font-weight calculation for safari (205b587)
  • configure: validate rules and checks properties (8c91ead)
  • is-visible: return false for opacity: 0 and 0 height scrollable regions (86ada3f)
  • listitem: do not fail for parent with role=presentation|none (a3ddc6e)
  • meta-viewport: don't throw error if viewport property doesn't have a value (2176794)

3.5.4 (2020-05-22)

Bug Fixes

  • get-element-stack: properly calculate position of children of floated elements (28a8c58)

3.5.3 (2020-03-31)

Bug Fixes

  • meta-viewport: parse negative and string values for maximum-scale (#2137) (8c92472)
  • respondable: ignore reflected messages from iframes (#2134) (3ab9f21)
  • header-present: update verbiage to use heading instead of header (#2132) (8890063)
  • color-contrast: mark more punctuations for review (#2126) (dc98afc)
  • unicode: detect supplementary private use area A (#2102) (f1739c2)
  • definition-list: Mention
    is allowed to group content in
    (#2098) (76b1a9f)
  • td-headers-attr: mark as needs review if headers attr is empty (#2096) (699b566)
  • td-has-headers: don't fail for empty headers attribute (#2095) (7952a37)
  • th-has-data-cells: fail when data cell points to a different header (#2094) (d3bd416)
  • has-lang: update message to indicate that xml:lang is not valid on HTML pages (#2093) (c3a7de2)
  • page-no-duplicate-contentinfo: do not fail when first element is inside landmark (#2092) (eca7e05)

3.5.2 (2020-03-06)

Bug Fixes

  • aria-allowed-role: allow role=spinbutton on inputtype=tel
  • color-contrast: ignore form elements that move text outside of node using text-indent (#2044) (85cc6ab)
  • commons: handle node(s) contained by SVG document when de… (#2054) (bf4c9bf)
  • getCheckMessage: add API to return check message (#2066) (e216322)
  • has-lang: fail check when xml:lang is used in HTML docum… (#2053) (e07aaea)
  • label-content-name-mismatch: ignore non widget aria role(s) & do not use deprecated lookupTable.rolesOfType (#2022) (89bd84c)
  • package-lock: change @deque/doT from agora to npm (#2058) (c03c0e5)
  • page-has-heading-one: find screen-reader only headings (#2065) (f808a12)
  • region: ignore direct child text nodes of body (#2050) (fde31d0)
  • skip-link: identify as skip-link only if the link is offscreen (#2079) (241e1d0)
  • check invaildrole fails only when all roles are invalid (#2075) (989b317)
  • ignore empty, whitespace or undefined role for rule `ari… (#2077) (dbd3c02)
  • update tags for rule area-alt (#2051) (7db231f)

3.5.1 (2020-02-12)

Bug Fixes

  • color-contrast: parse font-weight value as number (#2031) (#2040) (0bb2166)
  • color-contrast: properly pass options to check (#2033) (26b99c0)
  • commons: avoid unicode regex encoding in axe.min.js (#2024) (ae90dc4)
  • sri-history: correct SRI for various versions (#2041) (940c017)

3.5.0 (2020-02-04)

Features

  • aria-dpub-role-fallback: depreacte aria-dpub-role-fallback and move into aria-allowed-role (#1899) (8e25c20)
  • aria-label: deprecate Element arg; use virtualNode (#1922) (d14981c)
  • audit: allow runOnly option to accept an array of rules (#1889) (38d6a3f)
  • color-contrast: greatly improve performance for very large sites (#1943) (9ea0065)
  • core: add preload configuration option for media files (#1958) (8a62649)
  • core/reporters/v1: Add failureSummary to incomplete results (#1972) (c88883d)
  • get-element-stack: performant api to replace document.elementsFromPoint (#1842) (9ae07fb)
  • i18n: add Danish (da-DK) translation (#1876) (fb6fc41)
  • landmark-no-duplicate-*: add rule landmark-no-duplicate-main, don't use html as element source for all duplicate rules (#1949) (5ec7894)
  • layout-table: deprecate layout-table rule and checks (#1885) (d22cb30)
  • matches: use VirtualNode and deprecate HTMLElement (#1988) (2600a06)
  • rule: add color-contrast check for unicode characters, behind flags. (#1969) (0cd4037), closes #1906
  • rule: identical-links-same-purpose (#1649) (9c73f62)
  • rule: no-autoplay-audio (#1946) (b2373cb)
  • svg-img-alt: rule for when svg needs a title (#1953) (9491e09)
  • deprecate the use doT.js for messages (#1938) (a2ddba3)

Bug Fixes

  • color-contrast: properly pass options to check (#2033) (26b99c0)
  • commons: avoid unicode regex encoding in axe.min.js (#2024) (ae90dc4)
  • add tags with dots for wcag sc (#1849) (2f1ab36)
  • compute orientation lock from various transformation func… (#1937) (c987de0)
  • ignores axe.ping responses that do not contain axe=true (26cb1fb)
  • input[role=button][value='correct'] should pass (#1897) (4635fef)
  • remove heading from list of widget roles (#1882) (a8cbf71)
  • link-name: test role=link when there is no href (#1921) (6db28bc)
  • remove isNaN check (#2010) (5359b3f)
  • aria-allowed-attr: allow aria-details (#1956) (79e1c58)
  • aria-allowed-role: allow role combobox on input tel, search, url, and email (#1850) (ba75961)
  • aria-hidden-focus: mark as needs review if a modal is open (#1995) (28a3553)
  • aria-required-children: allow comboboxes with more popup roles (#1950) (35a24c0)
  • aria-roles: report error for fallback roles (#1970) (a1b7e08)
  • aria-valid-attr-value: mark as needs review for aria-current with invalid value (#1998) (39b8eae)
  • axe.d.ts: RunOnly.values should not accept a RunOnlyOption (#1888) (b68aa19)
  • build: add lang query parameter to helpUrl when builing with a locale (#1909) (8c5f9ef)
  • color-contrast: improve speed and accuracy of code blocks with syntax highlighting (#2003) (1b6ab42)
  • color-contrast: mark as needs review for text that contains only non-BMP characters (#2005) (e559be0)
  • color-contrast: support IE extension context (#2008) (62e31ea)
  • color-contrast: take into account parent opacity for foreground color (#1902) (8719700)
  • getElementStack: do not add hidden elements to the stack (#1991) (759d88d)
  • is-focusable: use tabindex attribute instead of property (#1912) (042a148)
  • is-icon-ligature: ignore whitespace characters (#1908) (7d2b2a6)
  • is-ligature-icon: rename canvas to canvasContext (#1880) (de9885d)
  • isFocusable: return true for summary element and false for details element with summary child (#1957) (34ec2d7)
  • listitem: clarify that li elements must be contained in a list or role=list (#1894) (6d8cfee)
  • locales: fix incompeteMessageFallback to be a string rather than an object (#1853) (88677a9)
  • meta-viewport: mark as a best-practice rule instead of wcag failure (#1960) (766f962)
  • only-listitem: add message about invalid role on li elements (#1954) (c3049ab)
  • page-has-main: do not find hidden elements (#2001) (6429e60)
  • page-no-duplicate-main: do not fail for duplicate hidden elements (#2000) (414dfb1)
  • preload: reject promise axe.utils.preload when XHR fails (#2009) (b406b1f)
  • region: allow content in roles with implicit aria-live (#2002) (a8d829e)
  • region: return outermost regionless node instead of html (#1980) (8d77be2)
  • region-rule: allow live regions with explicit roles (#1999) (b49bd95)
  • run: throw error if axe.run is called after a run has started but not completed (#1914) (3252a02)
  • server-side-image-map: return as needs review rather than failure (#1898) (d544856)
  • tabindex: don't error when tabindex property is overridden (#1910) (6b82a4c)
  • td-has-headers: greatly improve performance of td-has-headers rule (#1887) (a550309)
  • removes flaky test in axe Pro api check (b2bdcd1)
  • typings: add proper return value to getRule (#1900) (4d907f8)
  • unicode: stop parsing escaped unicode strings (#1997) (7447d03)

3.4.2 (2020-02-04)

Bug Fixes

  • color-contrast: support IE extension context (#2008) (cd651a0)
  • unicode: stop parsing escaped unicode strings (#1997) (523a31c)

3.4.1 (2019-12-11)

Bug Fixes

  • ignores axe.ping responses that do not contain axe=true (7d8aa42)
  • input[role=button][value='correct'] should pass (#1897) (3aba02c)
  • remove heading from list of widget roles (#1882) (beb458f)
  • listitem: clarify that li elements must be contained in a list or role=list (#1894) (8fa0964)
  • removes flaky test in axe Pro api check (f2b3b54)
  • aria-allowed-role: allow role combobox on input tel, search, url, and email (#1850) (75d3c8b)
  • axe.d.ts: RunOnly.values should not accept a RunOnlyOption (#1888) (94b1466)
  • build: add lang query parameter to helpUrl when builing with a locale (#1909) (a2f0247)
  • color-contrast: take into account parent opacity for foreground color (#1902) (639c41b)
  • is-focusable: use tabindex attribute instead of property (#1912) (aa5314d)
  • is-icon-ligature: ignore whitespace characters (#1908) (77fc838)
  • is-ligature-icon: rename canvas to canvasContext (#1880) (604ba4f)
  • link-name: test role=link when there is no href (#1921) (e839c57)
  • locales: fix incompeteMessageFallback to be a string rather than an object (#1853) (02a1d8a)
  • run: throw error if axe.run is called after a run has started but not completed (#1914) (290d125)
  • server-side-image-map: return as needs review rather than failure (#1898) (ce73af9)
  • tabindex: don't error when tabindex property is overridden (#1910) (e6875ee)
  • td-has-headers: greatly improve performance of td-has-headers rule (#1887) (a588cad)
  • typings: add proper return value to getRule (#1900) (0d7c3d2)

3.4.0 (2019-10-18)

Bug Fixes

  • aria-allowed-attr: allow 'aria-readonly' on listbox (#1825) (15f5d2d)
  • aria-form-field-name-matches: don't test combobox elements when they have a child input (#1742) (f0be6dc)
  • aria-required-children: allow combobox to own a searchbox (#1708) (42158ac)
  • aria-required-children: allow reviewEmpty nodes to have empty children (#1791) (a5d727c)
  • aria-valid-attr-value: fix incomplete translation message (#1739) (a0f3eef)
  • color-contrast: ignore nodes that don't contain text (#1837) (223a4bc)
  • color-contrast-matches: don't check aria-disabled explicit label element (#1741) (5bb566f)
  • configure: use translations for failure summaries (#1808) (5e53d7b)
  • flatten-tree: do not call deprecated getDistributedNodes (#1729) (46a5d11)
  • form-field-multiple-label: incomplete rather than fail for multiple labels (#1798) (0bdaa2b)
  • get-background-color: scroll element into view horizontally (#1845) (50df70a)
  • get-selector: don't throw error for disconnected fragment (#1802) (bb6591b)
  • label-content-name-mismatch: ignore ligature fonts (#1829) (683e005)
  • allows all roles on img tag with no alt attribute (929085a)
  • replace incorrect tag for meta-refresh rule (#1844) (754d56b)
  • update tags to wcag21aa for rule avoid-inline-spacing (#1757) (973d48f)
  • label-content-name-mismatch: ignore private space unicode (#1822) (b634c34)
  • scrollable-region-focus: ignore scrollable regions without content (#1788) (b36754e)
  • utils: Fix error in IE when getting scroll state on page with SVG elements. Closes #525 (#1820) (9a32f6f)

Features

  • audit: add lang query paramenter to help urls (#1794) (2d1c8a6)
  • configure: accept ver property as axeVersion fallback (#1812) (4ebcde8)
  • configure: add axeVersion property that checks compatibility of axe.version (#1793) (18fb8c8)
  • fieldset, group-labelledby: deprecate fieldset and group-labelledby checks (#1740) (ec9b762)
  • i18n: add spanish translation (#1758) (e9f821d), closes #1757
  • Add axe.utils.assert method (2f10d24)
  • is-visible: add support for clip-path techniques (#1706) (8ab262a)
  • radiogroup, checkboxgroup: deprecate radiogroup and checkboxgroup rules (#1640) (6d30880)
  • Add SerialVirtualNode class (82d01b0)
  • pt_BR localization (#1756) (330e2ec)
  • rule: aria-roledescription (#1745) (16682fd)
  • runVirtualNode: Allow serialised nodes experimental
  • video-description: deprecate video-description rule (#1737) (e91c25f)

3.3.3 (2020-02-04)

Bug Fixes

  • color-contrast: support IE extension context (#2008) (cd651a0)
  • unicode: stop parsing escaped unicode strings (#1997) (523a31c)

3.3.2 (2019-08-12)

Bug Fixes

  • aria-form-field-name-matches: don't test combobox elements when they have a child input (#1742) (5ac278f)
  • aria-valid-attr-value: fix incomplete translation message (#1739) (6909604)
  • flatten-tree: do not call deprecated getDistributedNodes (#1729) (48ddf9d)
  • update tags to wcag21aa for rule avoid-inline-spacing (#1757) (f534a6b)

3.3.1 (2019-07-23)

Bug Fixes

  • accessible-text-virtual: sanitize attributes on start node (#1694) (c0bb08c)
  • axe.d.ts: add optional xpath property to NodeResult (#1642) (287ef9c)
  • get-background-color: No longer calculate color from non-opaque overlapping element (#1644) (d45f81e)
  • get-background-color: No longer calculate color from non-opaque overlapping elm (f1c2310)
  • get-background-color: process tbody, thead, and tfoot when getting background color (#1653) (e114bfd)
  • enable running axe-core in strict CSPs (#1707) (cc5bd59)
  • image-redundant-alt: check for parent before calculating text (#1705) (1adbd02)
  • th-has-data-cells: empty cells will now pass (#1659) (c7489ab)
  • types: add new properties to RunOptions (#1697) (02aa36c), closes #1696
  • valid-attr-value: allow aria-describedby to return needs review (#1671) (2390925)
  • color-contrast: add px unit to error messages (#1634) (1712e46)

Tests

  • examples: do not fail tests if deque.com has violations (#1686) (2118360)
  • ensure locale files are valid (#1673) (588f9b5)
  • require new release rule help docs to be active before creating release (#1700) (e9f9c18)

3.3.0 (2019-07-08)

Bug Fixes

  • add SC 131 to rule aria hidden focus (#1474) (8da9a0d)
  • Add treegrid as allowed parent to rowgroup (#1435) (94e9893), closes #1386
  • arguments for gather function in build template (#1605) (753ecf4)
  • check if property exists in cache of flattenedTree (#1536) (51c2e19)
  • aria-valid-attr-value: allow aria-owns to pass when element is not in the DOM (#1526) (f835ed8)
  • deprecate na reporter (#1625) (3e807f0)
  • Exclude iframe for html-has-lang rule (Issue 1424) (#1430) (98b5ed2)
  • Include body as part of background color checks when element does not intersect (#1520) (55820cf)
  • make nullable impact properties have nullable types to match API docs (#1477) (efaed91)
  • Only load Promise polyfill if window.Promise is missing #1468 (1d70306)
  • Prevent error when using <select name="attributes"> #1397 (b477e0d)
  • remove unnecessary comments (6ed71c9)
  • role=radio should not require aria-checked (#1448) (0643cbd)
  • Scroll state had top and left properties flipped (#1469) (2ba83d3)
  • skip-link,region: Allow multiple skiplinks at page top (#1496) (642c8f1)
  • use execa instead of child_process.spawn (461ce83)
  • aria-allowed-attr: allow figure role (#1558) (a4b5240)
  • aria-required-attr: allow aria-valuenow to pass on elements with value (#1579) (3893e04)
  • aria-required-attr: don't require aria-valuemin/max (#1529) (80ae444)
  • aria-valid-attr-value: allow aria-controls to pass when element is not in the DOM (a7842e5)
  • flatten-tree: do not call deprecated getDistributedNodes (#1577) (93d59f4)
  • image-redundant-alt: prevent redundant issues of image tree (#1616) (af81897)
  • isSkipLink: cache first page link (#1525) (6a1bcba)
  • matches-selector: don't call matches function if none exist on the element (#1613) (7581592)
  • multiple-label: considers explicit labels in the same shadow tree (#1584) (b9a324a)
  • multiple-label: no longer raises issue when aria-labelledby overrides how AT views multiple labels (#1538) (fbae36b)
  • prettier: ignore generated api doc files (#1522) (c118da0)
  • raw-reporter: do not output DqElements (#1513) (3babcb6)
  • scrollable-region-focusable: exclude overflow:hidden as not scrollable (#1599) (940de07)
  • utils: make cache global instead of only setup in axe.run (#1535) (91a04c5)
  • virtual-node: fix hasClass to work with svg elements (#1603) (9d83662)

Features

  • autocomplete-matches: use virtualNode only lookups (#1604) (b32d4fe)
  • autocomplete-valid: allow autocomplete-valid to be run entirely off of a virtual node (#1591) (b3e0873)
  • qsa, flatten-tree: abstract Node and Element apis in virtual tree (#1562) (2f2e590)
  • reporter: adds the rawEnv reporter which wraps raw and env data (#1556) (ed15ed3)
  • role-img-alt: Split rule for role=img with no accessible name (#1586) (2416ed3)
  • rule: add additional elements to check for incomplete with required children (#1547) (3726901)
  • rule: add more perf timing metrics to rules (#1472) (98646e5)
  • rule,check: add new apis to run a rule synchronously (#1467) (84094a1)
  • add AbstractVirtualNode for linting (#1627) (a072ed2)
  • rule: Adding landmark-is-unique rule (#1394) (0088e94)
  • rule: Inline text spacing must be adjustable with custom stylesheets (#1446) (430b07f)
  • Improve perf of axe.run WWD-1821 (a84431a)
  • rule: New aria-input-field-label rule (#1610) (73d5273)
  • rule: New aria-toggle-field-label rule (#1450) (69a9c3b)
  • rule: Scrollable region focusable (#1396) (861371a)
  • rules: split button name rule into button only and button input rules (#1615) (ce20fbf)
  • run-virtual-rule: new api to run rules using only virtual nodes (#1594) (4e12217)
  • utils: add support for complex CSS selectors (#1494) (a9f9ee5), closes #1493
  • utils: Update CSSOM for nested @import computation (#1339) (a4e177b)

Tests

3.2.3 (2020-02-04)

Bug Fixes

  • color-contrast: support IE extension context (#2008) (cd651a0)
  • unicode: stop parsing escaped unicode strings (#1997) (523a31c)

3.2.2 (2019-03-07)

Bug Fixes

3.2.1 (2019-03-06)

Bug Fixes

3.2.0 (2019-03-04)

Bug Fixes

Features

Performance Improvements

Deprecate

3.1.2 (2018-09-07)

Bug Fixes

  • i18n: Update Japanese locale (#1107) (8138e55)
  • autocomplete appropriate to handle state terms (#1121) (35a4d11)
  • banner comment in generated axe files (#1112) (e4788bf)
  • ignore invalid and allow redundant role in aria-allowed-role (#1118) (a0f9b31)

3.1.1 (2018-08-28)

Bug Fixes

  • Fix broken 3.1.0 release script (c3b2a52)

3.1.0 (2018-08-28)

Bug Fixes

  • rule fix: Allow fallback labels when input has id (#951) (54fa569)
  • rule fix: Updating aria 1.1 allowed attributes (#964) (c3249c1)
  • rule fix: Allow aria-errormessage with fallback (17608b6)
  • rule fix: Ignore abstracts in determining element roles (1af6088)
  • rule fix: Add combobox and radio required properties (e80af7a)
  • rule fix: Allow all ARIA idref(s) to be empty (1498696)
  • rule fix: Allow divs as groups in dl (#1076) (f4f6df6), closes #262
  • rule fix: Allow live-region and dialog in region rule (#1073) (fb6438b)
  • rule fix: Allow only-dlitem / only-listitem to have any hidden content (#1098) (6034aae), closes #1021
  • rule fix: Do not flag font icons in color-contrast rule (#1095) (b6ac084), closes #1068
  • rule fix: Do not require media captions / descriptions (#1075) (289f623), closes #816
  • rule fix: improve messaging for hidden labels (ae07b8e)
  • rule fix: Ignore abstracts in determining element roles (e3b1e1d)
  • rule fix: Correctly handle role attribute on lists and listitems. (#949) (3a8729b)
  • core: allow returning a Promise in jsdom from axe.run (#943) (3858a1f)
  • typescript: Correct Check.evaluate and Check.after type definitions (#976) (db3ed40), closes #974
  • typescript: Typescript interface updates (#973) (f8c9905), closes #972
  • messages: Clearer fail message for aria-labelledby (956281b)
  • messages: Consistent landmark rule/check descriptions (#1003) (d792970)
  • messages: Show attribute in message (#1061) (9ff5d54)
  • Check data is an array of IDs (d64bc5f)
  • Don't crash with slot elements without shadowDOM (#977) (cc044af)
  • Generate jsdoc(umentation) (9f9b15b)
  • Stop indexOf override from crashing Axe (#968) (e3329ce)
  • Use node.matches* in place of prototype.matches* to prevent IE crash (#956) (ebdb590)

Features

  • new rule: Added new html-xml-lang-mismatch rule (#999) (7452a51)
  • new rule: aria-allowed-role (#945) (c270a46)
  • new rule: css-orientation-lock (wcag21) (#1081) (4ae4ea0)
  • new rule: Add WCAG 2.1 autocomplete-valid rule (e6189ce)
  • rule fix: Flag unsupported roles (#1064) (5515ee6)
  • rule fix: Remove non-existing "text" role (#1069) (67ec1f5)
  • rule fix: Break up duplicate-id rule for ARIA+labels and active elements (2ecfea7)
  • rule fix: Tag aria rules as WCAG 2, SC4.1.2 issues (e7816c0)
  • core: Allow rules to access CSSOM assets (#958) (5d6c1fa)
  • core: Add doT template engine (#1024) (f6f08d4)
  • commons: Add aria.getRole method (1d2a0e4)
  • commons: Add text.isValidAutocomplete method (8d44fe4)
  • i18n: Add runtime localization support (#1036) (7d4b70f)
  • i18n: Update FR (french) translation file for 3.1 release (#1089) (4a5cad0)
  • i18n: Update ja (Japanese) locale for 3.1 release (#1101) (ef6cd86)
  • deprecate: Deprecate audio-caption rule (#1071) (3b05fee)

3.0.3 (2018-06-04)

Bug Fixes

  • Resolve markdown lint errors. (efdad94) (aa90155)
  • Don't require all ARIA IDREFS to exist (#921) (130efed)
  • generate unsupported aria roles and attributes. (7315662)
  • Make empty role=lisbox elements as incomplete (#927) (87e979f)
  • Prevent axe-core crashing on “-“ as a class name (#884) (9c4d84e)
  • Right trim URLs before outputting them in getSelector (#924) (4775a23), closes #788
  • td-has-heading to ignore td with its role changed (#928) (d68af4c)
  • Update tags for frame-title rule (#935) (6436bbf)
  • core: Define 'axe-core' as an AMD module (#859) (7b46f63), closes #849 #856 #861 #847 #844 #871 #849 #849
  • Update tags to accesskey & link-name rules (#922) (a8e801c)
  • rule: Layout-table does not match presentation / none roles (#828) (5651ecc)
  • rule: restore labelledBy on unlabeled select (b7bdf66)
  • rules: Allow focusable role=application elements (b5de450)
  • typescript: Update ElementContext type (#822) (eb09248)

Features

  • generate ARIA supported documentation for roles and attributes. (6f095dd)
  • generated impacts as a part of rule descriptions (#898) (6265608)

3.0.2 (2018-04-24)

Bug Fixes

  • rule: Allow empty aria-labelledby values (#829) (d280c5f)
  • Prevent color rules from crashing Chrome 66+ #856 (#861) (147b665)
  • respondable: Identify the current axe instance by its application name when it exists (affd75c)
  • respondable: Use the hard-coded axe.application name as default (ab4a49f)
  • rule: Ignore hashbang URLs for skiplinks (#827) (e1f0c57)
  • rule: Tag video-caption only as SC 1.2.2 (87818e7)

3.0.1 (2018-04-03)

Bug Fixes

  • allow mixed casing of caption/summary (ca091ac)
  • Allow title on button-name (#794) (e31fe9a)
  • sri: Fix incorrect sri-history entries (#789) (f5f55f3)

3.0.0 (2018-03-19)

Bug Fixes

  • Allow exclusion of Shadow DOM content (cc66eb2)
  • Avoid flatTree memory leak (a902e80)
  • main-is-top-level: Rename check to landmark-is-top-level for greater reuse (b405af1)
  • Avoid timing issue with axe cleanup method (24ea6a7)
  • correct misnamed check (1e709e0)
  • Correct runOnly object for TypeScript definition (571e984)
  • has-at-least-one-main: Rename check to page-has-main, for reusability (9a9c283)
  • has-no-more-than-one-main: Rename check to page-no-duplicate for better reuse (e75324b)
  • region: Ignore forms without accessible name as landmarks (8ad2718)
  • rule: skip-link rule doesn't decode URI encoded href's (818b5cd)
  • Ensure all rules have a category tag (d61e67d)
  • make getSelector work with URIs that cannot be shortened (a113555)

Features

  • Make aria-level required with role=heading #740 (64b743f)
  • aria: allow DPUB ARIA roles (70b48f6)
  • frame-tested: Use this new rule to test if all frames are available, instead of axe.log (83cd17d)
  • landmark-contentinfo-is-top-level: add rule ensuring top level contentinfo (5692e7d)
  • landmark-no-more-than-one-banner: add rule ensuring no more than one banner (6617800)
  • landmark-no-more-than-one-contentinfo: add rule ensuring no more than one contentinfo (82217ef)
  • page-has-heading-one: Added new best-practice rule (cb8f261)
  • rules: add new rule aria-dpub-role-fallback (9470c02)
  • Make options.runOnly more forgiving about plurality (fa81f9d)
  • Translated all 3.0 rules to Japanese (3862e7e)

BREAKING CHANGES

  • Incorrect use of runOnly now throws errors
  • main-is-top-level: The check main-is-top-level is no longer available
  • has-at-least-one-main: Original has-at-least-one-main check is no longer available

3.0.0-beta.3 (2018-03-08)

Bug Fixes

  • Correct runOnly object for TypeScript definition (571e984)
  • has-at-least-one-main: Rename check to page-has-main, for reusability (9a9c283)
  • has-no-more-than-one-main: Rename check to page-no-duplicate for better reuse (e75324b)
  • main-is-top-level: Rename check to landmark-is-top-level for greater reuse (b405af1)
  • region: Ignore forms without accessible name as landmarks (8ad2718)

Features

  • aria-required-attr: Make aria-level required with role=heading #740 (64b743f)
  • aria: allow DPUB ARIA roles (70b48f6)
  • frame-tested: Use this new rule to test if all frames are available, instead of axe.log (83cd17d)
  • landmark-contentinfo-is-top-level: Add rule ensuring top level contentinfo (5692e7d)
  • landmark-no-more-than-one-banner: Add rule ensuring no more than one banner (6617800)
  • landmark-no-more-than-one-contentinfo: Add rule ensuring no more than one contentinfo (82217ef)
  • page-has-heading-one: Added new best-practice rule (cb8f261)
  • rules: Add new rule aria-dpub-role-fallback (9470c02)

BREAKING CHANGES

  • main-is-top-level: The check main-is-top-level is no longer available
  • has-at-least-one-main: Original has-at-least-one-main check is no longer available

3.0.0-beta.2 (2018-03-01)

Bug Fixes

  • perf: Improve getSelector performance (737c81c)
  • Delete Selenium example, use grunt-axe-selenium instead (063e701)

Features

Change Log

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

3.0.0-beta.1 (2018-02-19)

Bug Fixes

  • audio-caption: Change tag wcag122 to wcag121 #686 (#721) (9c7b9f1)
  • empty-heading: Skip headings with the role changed #645 (#722) (80ef961)
  • image-alt: Exclude svg[role="img"] elements (#683) (0fe74d8)
  • label: Prevent label rule from crashing on input without type #678 (#730) (4498680)
  • perf: improve select performance fixes #702 (3274919)
  • perf: memoize axe.utils.select (c9cd122)
  • perf: normalize all selectors for better cache utilization (189c165)
  • perf: remove need for node sorting from select completely (7677a6a)
  • performance: significantly improve the performance of the dom.findUp utility fixes #696 (9197e03)
  • add shadow dom coverage to all checks (0e48413), closes #690
  • bug-705: cleanupPlugins() should not throw exception when no arguments are provided (#709) (fb1d2f7)
  • Remove axe.a11yCheck() (88d039f)
  • use virtual methods where applicable (6ddc4e5)
  • type-checking: Improve typescript axe.run call signature (#707) (de45ee3)

Performance Improvements

  • Add performance metrics in Rule.runChecks (#701) (27fdc2f)

3.0.0-alpha.9 (2018-01-18)

Bug Fixes

  • aria-errormessage: adds support for aria-errormessage (#517) (c96f58c)
  • check: fix bug with async checks (441ca95)
  • color-contrast: allow disabled label children (db26bc9)
  • color-contrast: incl. elements w/ line breaks (a464918)
  • commons/aria: allow aria-required on checkbox role (3e21c6e)
  • adjust color algorithm for inline elements (7f8491e)
  • Allow checkbox and radio groups with hidden aria-labelledby targets #188 (6149bde)
  • Ensure overloaded Array.prototype won't crash axe (ea57ef2)
  • handle contrast of multiline inline el's (f9d565f)
  • Polyfills are made non-enumerable #648. (#649) (48d8703)
  • Remove href-no-hash rule (342cb6e)
  • Return inapplicable results (#473). (c9caeff)
  • Several of fixes for IE and Edge (#577) (63e1272)
  • skip-link rule now checks if a target exists (f7f9cf3)
  • commons/aria: allow aria-required on radio role (58b76a6)
  • commons/dom: fix isFocusable functions by checking screenreader (#658) (c665d0b), closes #647
  • core/utils/querySelectorAll: Ensure that elements do not get tested twice (#666) (a76a454)
  • required-children: add combobox > listbox exception (#559) (8d0991f)
  • rules/region: Treat <section> as a landmark if it has an accessible name #640 (#642) (c11b442)

Features

  • Add rule, landmark-main-is-top-level (#462) (63040bd)
  • collect-results-from-frames: add frameWaitTime option (#661) (8016ad1)
  • landmark-one-main: add rule ensuring one main landmark in document (#498) (dfc6069)
  • reporter: return one result of each type instead of zero when resultTypes is used (#604) (216a83b), closes #603
  • rule: Flag div/p/spans/headings in focus order (ce5f3dc), closes #632
  • allow options in aria-allowed-attr, aria-required-attr (#673) (61ac303)
  • Enable all rules by default (18263eb)
  • Improve generated selectors for namespaced elements in XHTML (#582) (9e3ca45), closes #563

BREAKING CHANGES

  • Skip-link rule no longer requires skip lins with a focusable target.

3.0.0-alpha.8 (2017-10-20)

Bug Fixes

  • aria-allowed-attr: align rowcount, colcount, and colindex with 1.1 spec (#555) (10efa88)
  • required-children: add combobox > listbox exception (#559) (8d0991f)
  • Added message about expected contrast ratio (#381) (#562) (9e30d64)

3.0.0-alpha.6 (2017-09-27)

Bug Fixes

  • aria: adding support for aria-expanded in menuitem (#521) (b30b451)
  • color-contrast: Include THEAD and TBODY in contrast checks (#514) (f98f8bd)
  • Match prerelease versions for helpUrl (#546) (5300577)
  • helpUrl: Properly parse x.0 versions (#550) (a51c5ce)
  • postinstall: use node, more conditionals (#520) (f5b5299)
  • responsible: Restrict error construction to known errors (0128a7e)

3.0.0-alpha.5 (2017-09-25)

Bug Fixes

  • aria: adding support for aria-expanded in menuitem (#521) (b30b451)
  • postinstall: use node, more conditionals (#520) (f5b5299)
  • Match prerelease versions for helpUrl (#546) (5300577)

3.0.0-alpha.4 (2017-09-08)

Bug fixes:

  • fix(color-contrast): Include THEAD and TBODY in contrast checks (#514) (f98f8bd)
  • fix(responsible): Restrict error construction to known errors (#513) (0128a7e)

Features:

  • docs: Document how to propose axe-core rules (#507) (cabd329)

3.0.0-alpha.3 (2017-09-06)

Bug fixes:

  • Additional ARIA 1.1. support and tests (#509) (9b4d2ee)
  • fix: RestoreScroll was running out of sync (#508) (ff3df2d)

3.0.0-alpha.2 (2017-09-01)

Bug Fixes

  • copy precommit hook as file, not a link (16f2f76)
  • expand tr support for color contrast (5a77c2f)
  • Ignore shadowRoots on elements that don't allow them (7f66ee8)
  • only run postinstall if .git exists (1107783)
  • try telling circle to skip .git/hooks (674408f)
  • Use frame query that supports shadow dom (#492) (94008ff)

Features

  • feat: Add sri-history file and update process (25ddb47)
  • feat: add standard-version (e1e067d)

3.0.0-alpha.1 (2017-08-16)

Bug Fixes

  • add copyright banner back in to axe.js (2aac29a)
  • Adjust if formatting (2211d78)
  • Align impact levels with Deque Way (28f4477)
  • Allow <track> to have no kind attribute (f996d0f)
  • complete shadow support for color matches (f0fe551)
  • aria: Allow implicit attribute values (b949749)
  • Set relatedNodes on color/link-in-block rules (#407) (7fde0fe)
  • aria: Treegrid should own rows, not treeitems (645d1fa)
  • Correct flattened tree algorithm to include the shadow host (#405) (70985b0)
  • Ensure all tests pass in Chrome (0b0240f)
  • ensure document is fetched from correct node (b28597c)
  • Exclude any checks from output if one passed (#466) (2dd3d68)
  • get tests all passing (#457) (4874327)
  • get virtualNode with getNodeFromTree (9bf2870)
  • getComposedParent should not return slot nodes (#438) (0478cbd)
  • Have table rules use shadow DOM (453be1b)
  • help-same-as-label for shadow DOM (dbbc544)
  • incomplete results should have impact (fcc51eb)
  • Let findUp work on shadow root children (0252218)
  • Let findUp work on shadow root children (#447) (0f98481)
  • Minimise scrolling in getBackgroundColor (f4551bb)
  • Pass all tests that use accessibleText (7ea8d6b)
  • checks/aria/required-children: add exception for native input combobox missing textbox (81ee2e4)
  • use virtualNode in duplicate-img-label (82e51bc)
  • is-in-text-block: Add Shadow DOM support (a125f79)
  • pass virtualNode to Rule.run (4534e86)
  • Properly output error stack (56f1867)
  • Remove log statements (6a6bd73)
  • Solve a few tests (02daad1)
  • Use getAttribute(id) over .id (#374) (353b53f)
  • Use testUtils in table tests (364d5cd)
  • use virtualNode in title-only check (5fb06e3)
  • whitespace in hidden-content test (99e8b73)

Features

  • Add aria-orientation to additional roles (bb07c2d)
  • add check testUtils (6f53279)
  • Add dom.getComposedParent function (aac57c0)
  • Add Japanese localisation (5f8c9c8)
  • Add new ARIA 1.1 values for haspopup (9f7da56)
  • Add option restoreScroll (d55f3cd)
  • add S.C. 2.4.4 to link-name rule. Fixes #369 (70728e6)
  • add SD support to color-contrast-matches (b595b42)
  • Add shadow DOM support to list checks (#439) (d92c1a1)
  • Add shadow DOM to duplicate-img-label check (#443) (2c0b075)
  • Add shadow DOM to landmark check (98f6023)
  • add shadow support to aria-required-children (f729e25)
  • add shadow support to group-labelledby (e2a9642)
  • Add sri-history file and update process (#476) (25ddb47)
  • Allow hidden-content to work through shadow DOM bounds (789d62e)
  • fieldset check shadow DOM (da148d3)
  • Make explicit check consider shadow DOM (#442) (9ddfc0f)
  • Make region check work with shadow DOM (ecd222f)
  • Run text.accessibleText() on virtual elements (#420) (414fcbe)
  • ShadowDOM support for media checks (0f21574)
  • aria: Support progressive ARIA 1.1 attributes / roles (#468) (ebb2a5d)
  • aria-required-parent: add Shadow DOM support (6ed29f0)
  • duplicate-id: Add shadow DOM support (439bc71)
  • link-in-text-block: Add shadow DOM support (46a2cca)
  • shadow DOM: Create commons virtual methods, for backward compatibility (86a4c25)

2.4.2 (2017-09-25)

Bug Fixes

  • aria: adding support for aria-expanded in menuitem (#521) (b4c42fe)
  • Match prerelease versions for helpUrl (#546) (c166708)
  • fix(node4): use var to declare variables (#541) (c72badb)

2.4.1 (2017-09-12)

Bug Fixes

  • fix(postinstall): use node, more conditionals (#520) (98fac8a)

2.4.0 (2017-09-08)

Bug fixes:

  • fix(color-contrast): Include THEAD and TBODY in contrast checks (#514) (f98f8bd)
  • fix(responsible): Restrict error construction to known errors (#513) (0128a7e)

Features:

  • docs: Document how to propose axe-core rules (#507) (cabd329)

2.4.0-alpha.2 (2017-09-06)

Bug fixes:

  • test(aria): aria-haspopup, aria-modal for 1.1
  • style(test/aria): add line breaks for readability
  • test(aria): add missing roles and properties
  • fix: RestoreScroll was running out of sync (#508)

Features:

  • feat(ARIA 1.1): Allow row-index, setsize and posinset on more roles

2.4.0-alpha.1 (2017-08-31)

Bug fixes:

  • chore: add help text for testconfig Grunt task
  • fix: Properly output error stack
  • doc: Add 'on mobile' to viewport rule
  • fix: Ensure all tests pass in Chrome
  • fix: Minimise scrolling in getBackgroundColor
  • chore: Minor build chores for whitespace and lockfile
  • fix: Align impact levels with Deque Way
  • fix: Set relatedNodes on color/link-in-block rules
  • fix: incomplete results should have impact
  • fix(aria): Allow implicit attribute values
  • chore: ignore growl in retire
  • fix: Use getAttribute(id) over .id
  • fix: Exclude any checks from output if one passed
  • fix(aria): Treegrid should own rows, not treeitems
  • fix(aria): add exception for native input combobox missing textbox. Fixes #160
  • test: fix aria/required-children for jshint
  • feat: allow link text from single-cell layout table
  • fix: expand tr support for color contrast
  • chore: ignore node_modules in examples when linting

Features:

  • feat: Add option restoreScroll
  • doc: add more info on testing hidden regions
  • feat: add S.C. 2.4.4 to link-name rule. Fixes #369
  • feat: Add Japanese localisation
  • doc: Add instructions on debugging on CircleCI
  • test: add unit tests for button-has-visible-text
  • chore: add descriptions to Grunt tasks
  • feat(aria): Support progressive ARIA 1.1 attributes / roles
  • feat: Add new ARIA 1.1 values for haspopup
  • feat: Add aria-orientation to additional roles

2.3.1 (2017-06-15)

Bug fixes:

  • Improvements to hidden-content rule
  • Deduplicated langs in valid-lang options

2.3.0 (2017-06-14)

Bug fixes:

  • Overhaul of selectors API
  • New experimental rule for hidden-content
  • New rule for flagging aria-hidden="true" on document.body
  • Color-contrast rule impact is now serious
  • Color-contrast fixes for implicit labels and TR elements
  • Color-contrast puts 1:1 ratio elements into Needs Review/incomplete
  • List category mappings in docs
  • Update axe.source to work with Firefox webdriver

2.2.3 (2017-06-01)

Bug fixes:

  • Removed the disable property from link-in-text-block

2.2.2 (2017-05-25)

Bug fixes

  • Stabilize incompleteData API for backwards compatibility
  • Change impact of duplicate-id rule to moderate

2.2.1 (2017-05-19)

Bug fixes

  • Remove nodes from the color contrast incompleteData API to avoid circular references

2.2.0 (2017-04-24)

Changes

  • Add configuration options for iframes: false, selectors: false, and elementRef: true
  • Improve color-contrast rule for disabled elements
  • Add webdriver task for testing mobile viewports
  • Improve audio/video captioning rules
  • Improve th-has-data-cells rule
  • Expose incomplete reasons for color contrast rule as part of Needs Review
  • Implement rule groupings as tags
  • Allow building of axe in multiple languages
  • Empty-heading rule has impact: moderate

2.1.8 (2017-05-21)

Changes

  • Move from Snyk to Retire.js
  • Make CI run test-fast task instead of parallel
  • Add documentation on writing integration tests and rules
  • Allow a larger list of languages for HTML-valid-lang rule
  • Add support for [role=img] in image-alt rule
  • Fix bug with innerHeight in get-background-color
  • Improve dom.is-offscreen function
  • Integrate optional performance timer
  • Empty include defaults to document

2.1.7 (2016-12-13)

Changes

  • Add promise-based axe.run API method in favor of axe.a11yCheck
  • Move TypeScript definition to root of project
  • Add Inapplicable and Can't Tell results
  • New rule: frame-title-unique
  • Improvements to table rules: td-has-header, th-has-data-cells
  • Color contrast rule performance improvements using polyfilled elementsFromPoint
  • Add better support for implicit roles
  • DQElement supports xPath

2.0.7 (2016-09-28)

Changes

  • Add TypeScript definition v1

2.0.5 (2016-04-20)

Changes

  • Support for UMD pattern
  • Adds 508 tagging for table rules
  • Fixes race condition for iframes
  • Exclude actual nodes from array checking

2.0.5 (2016-04-13)

Changes

  • Improvements to messaging for extensions

2.0.3 (2016-04-12)

Changes

  • Security improvements
  • Build includes Babel/ES6
  • Improvements to table rules
  • axe can be loaded in Node

2.0.0 (2016-03-01)

Changes

  • Adds support for AMD modules
  • Fixes incompatibility with Webpack
  • Improvements to rules and checks
  • Help urls no longer hard-coded
  • Improved error handling

1.1.1 (2015-09-04)

Changes

  • Adds Travis hooks
  • Adds Sauce Labs
  • Encodes HTML in descriptions
  • Updates messages and help URLs

1.0.1 (2015-06-10)

Changes

  • Initial public release