About Our Rules
How Does Automated Testing Work With AudioEye?
The Accessibility Testing SDK lets you use AudioEye's automated testing suite to analyze your site and get details of the issues discovered.
AudioEye's rules are based on specific criteria we expect are present in your site or code. These are defined by WCAG guidelines (currently built to test for WCAG 2.2 conformance, including levels A-AAA) plus best practices we have developed over years of advising clients how to avoid legal claims caused by accessibility errors.
WCAG guidelines are complex and comprised of multiple criteria, some of which cannot be measured accurately by automated testing. If a rule does not detect any issues, it doesn’t mean the WCAG guideline itself is passed. Rather, the details or expected behavior written in each rule are present.
How Rules Work in Different Testing Scenarios
Each individual test in the automated test package is called a rule (RuleCode).
Depending on the type of testing you are conducting -- like if you are using the --component
flag (we attempt to
detect this during Jest testing) or if you are running a full page scan -- the set of accessibility rules that will be
run is slightly different.
Component vs Full-Page Rules
Not all rules apply to individual html components, and similarly some issues can only be detected during a full page
scan. The following rules will not work when using the --component
flag
Aria_Landmarks_Missing
Heading_H1_Missing
Heading_H1_Multiple
Html_Attribute_Lang_Invalid
Html_Attribute_Lang_Missing
Html_DocType_Missing
Html_MainContent_IsAriaHidden
Html_Page_Title_Missing
Html_Page_Title_WeakName
Html_SkipLink_Missing
Html_SkipLink_Target_Invalid
Html_SkipLink_WeakName
Rules Requiring Browser Context
Certain rules require the rendered style of the page to properly determine if there is an accessibility issue or not. The following rules are used in other AudioEye testing products but they will not work when you are using the Jest or Cypress testing tools.
Aria_Label_TextContent_MisMatch
Audio_Captions_Missing
Button_Name_Duplicate
Button_Name_Missing
Checkbox_AttributeRequirement_Missing
Element_Disabled_Detect
Element_Focus_Visible_Missing
FormField_Autocomplete_Invalid
FormField_LabelRequirement_Missing
Heading_Name_Empty
HtmlList_ChildElem_LI_Missing
Html_AriaHidden_Tabable
Html_Name_Redundant
Html_Possible_Heading
Html_PresentationChildren_Tabbable
Html_ScrollableFocus_Invalid
Iframe_Name_Missing
Iframe_Tabindex_Invalid
Imagebutton_Name_Missing
Img_Name_Missing
Img_Name_Redundant
Img_Name_ShouldBe_Empty
Link_AdjacentHref_Redundant
Link_Name_Missing
Link_Name_WeakName
Link_VisualIndicator_Missing
Modal_Usage_Cookie_Detect
Modal_Usage_Detect
NonText_Contrast_TooLow
Object_NoText_Name_Missing
Svg_ExplicitRole_Name_Missing
Svg_Name_Missing
Table_Header_Invalid
Text_Attribute_Lang_Invalid
Text_Contrast_TooLow
Text_LetterSpacing_Important_Detect
Text_LineHeight_Important_Detect
Text_Size_TooSmall
Text_Strikethrough_Detect
Text_WordSpacing_Important_Detect
Check What Rules Run
To see what tests are being run use the --print-test-list
flag on the CLI when running a scan.
% npx aetest scan --component --print-test-list < component.html
::: START AudioEye Accessibility Testing SDK CLI :::
Scanning HTML from STDIN
The following rules were run...
Video_Controls_Missing
Video_Captions_Missing
TreeItem_ParentRequirement_Missing
Text_WordSpacing_Important_Detect
Text_LineHeight_Important_Detect
Text_LetterSpacing_Important_Detect
Text_Language_RightToLeft_Missing
Text_Contrast_TooLow
Text_Attribute_Lang_Invalid
Table_Header_Missing
Table_Header_Invalid
Table_Header_Empty
Table_Caption_Summary_Redundant
Table_Caption_Missing
Tab_ParentRequirement_Missing
Switch_AttributeRequirement_Missing
Svg_Name_Missing
Scrollbar_AttributeRequirement_Missing
Progressbar_AttributeRequirement_Missing
Option_ParentRequirement_Missing
Object_NoText_Name_Missing
NonText_Contrast_TooLow
Menuitem_ParentRequirement_Missing
Menuitem_Name_Missing
Listbox_Name_Missing
List_ChildRequirement_Missing
ListItem_ParentRequirement_Missing
Link_VisualIndicator_Missing
Link_Name_WeakName
Link_Name_Missing
Link_Img_Alt_Redundant
Link_ExternalWarning_Missing
Link_DownloadWarning_Missing
Img_Name_WeakName
Img_Name_ShouldBe_Empty
Img_Name_Missing
Img_AttributeRequirement_Missing
Imagebutton_Name_Missing
Iframe_Tabindex_Invalid
Iframe_Name_WeakName
Iframe_Name_Redundant
Iframe_Name_Missing
Iframe_Name_Duplicate
Html_ScrollableFocus_Invalid
Html_PresentationChildren_Tabbable
Html_Name_Redundant
Html_MetaRefresh_Detect
Html_Language_RightToleft_Missing
Html_Blockquote_Cite_Invalid
Html_AriaHidden_Tabable
HtmlList_Definition_ChildElem_Missing
HtmlList_ChildElem_LI_Missing
Heading_Sequence_Wrong
Heading_Name_Empty
Heading_AttributeRequirement_Missing
Form_LegendDescription_Missing
FormField_Name_WeakName
FormField_Label_Missing
FormField_Hidden_Autocomplete
FormField_Autocomplete_Multiple
FormField_Autocomplete_Missing
FormField_Autocomplete_Invalid
Element_TabIndex_Positive
Element_Interactive_Nested
Element_Focus_Visible_Missing
Element_FocusOrder_MisMatch
Dialog_AttributeRequirement_Missing
Combobox_AttributeRequirement_Missing
Combobox_Name_Missing
Columnheader_ParentRequirement_Missing
Checkbox_AttributeRequirement_Missing
Cell_ParentRequirement_Missing
Button_Name_WeakName
Button_Name_Missing
BadTag_Spacer_Detect
BadTag_Presentational_Detect
BadTag_Marquee_Detect
BadTag_Emphasis_Detect
BadTag_Blink_Detect
Audio_Controls_Missing
Aria_Role_Menu_Invalid
Aria_Role_Invalid
Aria_LabelledBy_Invalid
Aria_Label_TextContent_MisMatch
Aria_DescribedBy_Invalid
Aria_Attribute_Invalid
Total rules run: 86
AudioEye Rules Version: 8.3.5
Found 3 accessibility issues
Img_Name_Missing - count: 3
Test results were written to aetest_output.html
::: END AudioEye Accessibility Testing SDK CLI :::
Describing a Rule
If you need more details about a specific issue, you can use the describe
command to get more information. For
instance, for the result Img_Name_Missing
you can find more information by running:
% npx aetest describe Img_Name_Missing
{
code: 'Img_Name_Missing',
description: 'We detected an image that is missing an accessible name. The accessible name of an image usually comes from the alt attribute or related ARIA properties and should be provided unless the image is deemed decorative. In the case where an image is unimportant or decorative, provide an alt attribute with an empty value. Otherwise, provide an appropriate alt attribute or related ARIA property for the image to possess an accessible name.',
fixAtSource: false,
fullName: 'Image accessible name is missing',
wcagSuccessCriteriaLevelCode: 'A',
wcagSuccessCriteriaName: 'Non-text Content',
wcagSuccessCriteriaNumber: '1.1.1'
}