GithubHelp home page GithubHelp logo

dequelabs / axe-core Goto Github PK

View Code? Open in Web Editor NEW
5.7K 5.7K 739.0 17.27 MB

Accessibility engine for automated Web UI testing

Home Page: https://www.deque.com/axe/

License: Mozilla Public License 2.0

JavaScript 89.15% HTML 10.50% TypeScript 0.26% CSS 0.05% Shell 0.04%
a11y accessibility axe

axe-core's People

Contributors

42tte avatar ahuth avatar attest-team-ci avatar autosponge avatar clottman avatar dbjorge avatar dbowling avatar dependabot[bot] avatar dmfay avatar dsturley avatar dylanb avatar greenkeeper[bot] avatar iandotkelly avatar isner avatar jasonkarns avatar jeeyyy avatar ma10 avatar marcysutton avatar mfairchild365 avatar mfranzke avatar michael-siek avatar nschonni avatar scottaohara avatar scurker avatar shankarshastri avatar stephenmathieson avatar straker avatar sulsanaul avatar wilcofiers avatar zidious avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

axe-core's Issues

Extend getRules

Add help, helpUrl and tags to the output of axe.getRules.

documentation around `rules`

The documentation around selecting which rules should be run (https://github.com/dequelabs/axe-core/blob/master/doc/API.md#b-options-parameter) lists essentially three modes of operation:

  1. only rules included in (presumably the union?) set of rules matching given tags
  2. run all rules except x, y, z
  3. run only rules x, y, z

syntax for 1. is runOnly: type: "tag", values:[]
syntax for 2. is rules: rule1: enabled: false
syntax for 3. is documented as runOnly: type: "rule", values:[]

However, example 3 shows rules: rule1: enabled: true. With the documented behavior being that only the rules listed as enabled are run. This seemingly contradicts the documentation which states that:

The default operation for a11yCheck is to run all rules.

Is example 3 a typo? Should it have been runOnly: type: "rule", values: [x, y, z]? Or is the syntax truly rules: rule1: enabled: true/false. Or are both forms acceptable? If so, it sounds as if

The default operation for a11yCheck is to run all rules.

should be clarified to state that once any rules/runOnly is specified, then a11yCheck no longer defaults to "all rules". (For if that were true, then specifying a list of rules with enabled:true would be meaningless.)

Expose DqElement

Expose a "getSelector" or DqElement API to allow Chrome to more efficiently generate an ID

stop leaking uuid into the global namespace

The dependency on the node-uuid module is leaking things into the window namespace in a browser and into the module.exports when required in Node.js

We should not leak anything into any namespaces unintentionally

Improve context parameter defaults

The following should default include to the document:

axe.a11yCheck({}, function (r) { console.log(r); });
axe.a11yCheck({ exclude: ['.bob'] }, function (r) { console.log(r); });
axe.a11yCheck({ exclude: [] }, function (r) { console.log(r); });

Color contrast of disabled form controls

A color contrast violation should not be identified for labels of inputs which are currently disabled, per the "Incidental" exception found at http://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast.

For example, in the example below, the label containing "Jim" should not fail color contrast.

<style>
  label.disabled {
    color: #ccc;
  }
</style>

<input id="bob" type="radio" name="name" />
<label for="bob">Bob</label>

<input id="jim" type="radio" name="name" disabled="disabled" />
<label for="jim" class="disabled">Jim</label>

Document the easiest way to start

Would be good to document the easiest way to get going on a given html page.

I would think that doing an audit of the whole page would be the easiest. How would I do that?

I'd rather not have Qunit or Selenium enabled to do this too.

Add node's ID to duplicate ID failure message

This information is not readily available as the CSS selector will not use an ID if it is not unique. We should include the value of the duplicated ID attribute in the failure message.

Create aria-owns rules

Elements may only be owned by one other element. With aria-owns, it is possible to

  1. Have two elements trying to own the same element explicitly
  2. Have an element try to own something that is already implicitly owned by some other element

We should have rules that detect both of these scenarios

callback should follow error-first convention

For better or for worse, nodejs conventions are taking over JavaScript as a whole, even in browser js.

One convention that applies to a11yCheck is the callback parameters. It currently accepts a single successful result parameter. NodeJS convention, by contrast, is well established that callbacks are defined as cb(error, result).

I strongly recommend that the a11yCheck callback conform to this pattern, as it would make it possible to use all the nodejs async utilities (like async itself, and any promise library with denodify-like support).

Some ready on node's error-first callbacks: http://thenodeway.io/posts/understanding-error-first-callbacks/

Engine should not require duplicated Check function bodies

In order to (sanely) extend or override Checks, the engine will need to store Checks in a single collection and then look up function bodies & default options once rather than for every rule that references it.

Currently it expects:

dqre._load({
  rules: [{
    id: 'bob',
    any: [{
       id: 'bob-check',
       options: 'specific-options-for-rule-implementation'
       evaluate: function () {
         // function body
       }
    }, {
       id: 'bob-check2',
       evaluate: function () {
         // function body
       }
    }]
  }]
});

Change this to:

dqre._load({
  checks: [{
    id: 'bob-check',
    options: 'default-options',
    evaluate: function () {
      // function body
    }
  }, {
     id: 'bob-check2',
     evaluate: function () {
       // function body
     }
  }],
  rules: [{
    id: 'bob',
    any: [{
       id: 'bob-check',
       options: 'specific-options-for-rule-implementation'
    }, 'bob-check2']
  }]
});

Add option to suppress passes

The passes array can be large and capturing it for large pages can take seconds, we should allow for an option to be added to suppress the capture of the node information in the passes array.

When this option is turned on, the rules that run and passed on the page should still be captured but the nodes array will be empty.

Warn when given an unknown ruleset tag or rule ID

a11yCheck({}, {
  runOnly: {
    type: "tag",
    values: ["my-made-up-tag"]
  }
})

I would expect this to throw an error for my-made-up-tag not being a known ruleset tag. However, it successfully returns 0 violations. (Presumably because the tag doesn't exist, so the rule-set that was checked is empty, thus finding 0 violations.)

Additionally:

a11yCheck({}, {
  runOnly: {
    type: "rule",
    values: ["fakeRule"]
  }
})

also successfully returns 0 violations, rather than an error even though fakeRule doesn't exist.

I would expect both of these scenarios (as well as with {rules: {fakeRule: {enabled:true}}}) to return errors stating that the rule ID or tag doesn't exist.

Bower dependencies for utils are included more than once

Now that rules are stored in the same repository, we should only have to include dependencies once, however the following dependencies are bundled both for core/engine and commons:

[
  'bower_components/simple-clone/lib/index.js',
  'bower_components/element-matches/lib/index.js',
  'bower_components/escape-selector/lib/index.js'
]

Perhaps throw error/warning when `include` context selector doesn't match anything

This is clearly up to the maintainers (as the behavior is rather subjective), but in the process of working on the matcher gem, I found it odd that invoking a11yCheck({include: "#nonExistant"}) doesn't throw an error when #nonExistant doesn't exist.

Perhaps it's not worth throwing an error, as the 'error state' can be derived by checking if both violations and passes are empty in the results? I'm not familiar enough with the underlying functionality to know if there are other instances where violations and passes would both be empty that doesn't indicate a no-match scenario.

Thoughts?

Document how to specify options for Checks

API documentation does not document how to specify options for Checks. We should probably also document what Checks take options, the format they expect and default values.

NodeLists cannot be used as context in PhantomJS

PhantomJS thinks NodeLists have a typeof function. The following fails to find any issues in PhantomJS < 2.

var context = document.querySelectorAll('#header, #footer);
axe.a11yCheck(context, function (r) {
   console.log(r);
});

Add support for SVG images

We do not handle SVG images correctly at the moment, need to be able to calculate the accessible name correctly for inline SVG and report when not present.

New Rule: Scrollable pane not keyboard accessible

Scrollable areas (overflow: auto / scroll) need a method for keyboard-only users to scroll the area. This can be fixed if:

  1. The scrollable area has focusable elements within it.
  2. The scrollable area is added to tab order.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.