testilo 3.1.1 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testilo",
3
- "version": "3.1.1",
3
+ "version": "3.1.2",
4
4
  "description": "Client that scores and digests Testaro reports",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -146,8 +146,9 @@ exports.makeQuery = (report, query) => {
146
146
  if (scores.tenon) {
147
147
  const testAct = actOf('tenon');
148
148
  const tenonResult = testAct.result.data.resultSet;
149
- const tenonItems = new Set(tenonResult.map(result => result.errorTitle));
150
- const tenonFailures = Array.from(tenonItems).join(innerJoiner);
149
+ const tenonSet = new Set(tenonResult.map(result => result.errorTitle));
150
+ const tenonItems = Array.from(tenonSet).map(item => `<li>${item}</li>`);
151
+ const tenonFailures = tenonItems.join(innerJoiner);
151
152
  query.tenonResult = packageFailText(scores.tenon, 'tenon', tenonFailures);
152
153
  }
153
154
  else if (inferences.tenon) {
@@ -304,6 +304,33 @@ exports.scorer = report => {
304
304
  scores.total += scores.tenon;
305
305
  }
306
306
  }
307
+ else if (which === 'wave') {
308
+ facts = test.result && test.result.categories;
309
+ if (facts) {
310
+ rules.wave
311
+ = 'multiply alerts by 2*, contrast errors by 3*, errors by 4* (*discounted); sum';
312
+ const weights = {
313
+ error: 4,
314
+ contrast: 3,
315
+ alert: 2
316
+ };
317
+ const waveScores = {
318
+ error: 0,
319
+ contrast: 0,
320
+ alert: 0
321
+ };
322
+ ['error', 'contrast', 'alert'].forEach(level => {
323
+ const {items} = facts[level];
324
+ waveScores[level] = Math.round(Object.keys(items).reduce((total, ruleID) => {
325
+ const rawScore = items[ruleID].count * weights[level];
326
+ const divisor = duplications.wave[`${level.slice(0, 1)}:${ruleID}`] + 1 || 1;
327
+ return total + rawScore / divisor;
328
+ }, 0));
329
+ });
330
+ scores.wave = waveScores.error + waveScores.contrast + waveScores.alert;
331
+ scores.total += scores.wave;
332
+ }
333
+ }
307
334
  else if (which === 'bulk') {
308
335
  facts = test.result && test.result.visibleElements;
309
336
  if (typeof facts === 'number') {
@@ -0,0 +1,313 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="author" content="undefined">
7
+ <meta name="creator" content="undefined">
8
+ <meta name="publisher" name="undefined">
9
+ <meta name="description" content="report on results of undefined procedure">
10
+ <meta name="keywords" content="accessibility a11y web testing">
11
+ <title>Accessibility test digest</title>
12
+ <link rel="icon" href="favicon.png">
13
+ <link rel="stylesheet" href="style.css">
14
+ </head>
15
+ <body>
16
+ <main>
17
+ <header>
18
+ <h1>Accessibility test digest</h1>
19
+ <p class="summary bold">Railpass</p>
20
+ <p class="summary">Testilo, <code>tsp10</code> procedure</p>
21
+ <p class="summary">Score: 1589</p>
22
+ </header>
23
+ <h2>Introduction</h2>
24
+ <p>The <code>tsp10</code> accessibility testing procedure was executed by <a href="https://www.npmjs.com/package/testaro">Testaro</a> on the web page at <a href="https://www.railpass.com/">https://www.railpass.com/</a>, belonging to Railpass, on 2022/06/03. The procedure performed 808 tests. Of these, 16 tests are custom tests defined by Testaro, and the others belong to packages of tests created by others. Testaro produced a report enumerating the test results.</p>
25
+ <p>These tests&mdash;like all tests&mdash;are fallible. The failures described below merit investigation as <strong>potential</strong> opportunities for improved accessibility. But some reported faults may not actually harm accessibility, and some accessibility faults can escape detection by any of these tests.</p>
26
+ <p>Given the report produced by Testaro, another procedure, <code>tsp10a</code>, assigned weights to the tests and computed a total score for the page, 1589 (where 0 is the best possible score). Just as tests are fallible, any scoring procedure is subjective, and different reasonable procedures could assign different scores on the basis of the same report. This digest explains how <code>tsp10a</code> computed a score for the page.</p>
27
+ <h2>Summary</h2>
28
+ <p>The packages&rsquo; and custom tests&rsquo; contributions to the score were:</p>
29
+ <table class="allBorder secondCellRight">
30
+ <caption>Score components</caption>
31
+ <tbody class="headersLeft">
32
+ <tr><th>total</th><td>1589</td></tr>
33
+ <tr><th>focInd</th><td>530</td></tr>
34
+ <tr><th>aatt</th><td>179</td></tr>
35
+ <tr><th>alfa</th><td>178</td></tr>
36
+ <tr><th>ibm</th><td>145</td></tr>
37
+ <tr><th>wave</th><td>125</td></tr>
38
+ <tr><th>tenon</th><td>91</td></tr>
39
+ <tr><th>motion</th><td>74</td></tr>
40
+ <tr><th>axe</th><td>38</td></tr>
41
+ <tr><th>styleDiff</th><td>35</td></tr>
42
+ <tr><th>focOp</th><td>34</td></tr>
43
+ <tr><th>log</th><td>34</td></tr>
44
+ <tr><th>zIndex</th><td>33</td></tr>
45
+ <tr><th>labClash</th><td>30</td></tr>
46
+ <tr><th>linkUl</th><td>30</td></tr>
47
+ <tr><th>hover</th><td>28</td></tr>
48
+ <tr><th>focAll</th><td>3</td></tr>
49
+ <tr><th>role</th><td>2</td></tr>
50
+ <tr><th>bulk</th><td>0</td></tr>
51
+ <tr><th>embAc</th><td>0</td></tr>
52
+ <tr><th>menuNav</th><td>0</td></tr>
53
+ <tr><th>radioSet</th><td>0</td></tr>
54
+ <tr><th>tabNav</th><td>0</td></tr>
55
+ </tbody></table>
56
+ <h2>Test packages</h2>
57
+ <p>Most of the tests belong to the following five accessibility test packages created by various groups of specialists.</p>
58
+ <h3><code>aatt</code></h3>
59
+ <p>The page <strong>did not pass</strong> the <code>aatt</code> test and received a score of 179 on <code>aatt</code>. The details are in the appended report, in the section starting with <code>"which": "aatt"</code>. There was at least one failure of:</p>
60
+ <ul>
61
+ <li>warning: Interfering with a user agent's ability to zoom may be a failure of this Success Criterion.</li>
62
+ <li>warning: Anchor elements should not be used for defining in-page link targets. If not using the ID for other purposes (such as CSS or scripting), consider moving it to a parent element.</li>
63
+ <li>warning: The heading structure is not logically nested. This h4 element should be an h2 to be properly nested.</li>
64
+ <li>warning: Heading markup should be used if this content is intended as a heading.</li>
65
+ <li>warning: Check that this element has an inherited foreground colour to complement the corresponding inline background colour or image.</li>
66
+ <li>warning: The heading structure is not logically nested. This h4 element should be an h3 to be properly nested.</li>
67
+ <li>warning: This content looks like it is simulating an ordered list using plain text. If so, marking up this content with an ol element would add proper structure information to the document.</li>
68
+ <li>warning: The heading structure is not logically nested. This h5 element should be an h4 to be properly nested.</li>
69
+ <li>warning: If this element contains a navigation section, it is recommended that it be marked up as a list.</li>
70
+ <li>warning: Img element is marked so that it is ignored by Assistive Technology.</li>
71
+ <li>warning: This element has "position: fixed". This may require scrolling in two dimensions, which is considered a failure of this Success Criterion.</li>
72
+ <li>error: This link points to a named anchor "main-content" within the document, but no anchor exists with that name.</li>
73
+ <li>error: Anchor element found with a valid href attribute, but no link content has been supplied.</li>
74
+ <li>error: Img element missing an alt attribute. Use the alt attribute to specify a short text alternative.</li>
75
+ <li>error: This textinput element does not have a name available to an accessibility API. Valid names are: label element, title , aria-label , aria-labelledby .</li>
76
+ <li>error: This form field should be labelled in some way. Use the label element (either with a "for" attribute or wrapped around the form field), or "title", "aria-label" or "aria-labelledby" attributes as appropriate.</li>
77
+ <li>error: This button element does not have a name available to an accessibility API. Valid names are: title , element content, aria-label , aria-labelledby .</li>
78
+ <li>error: Img element is the only content of the link, but is missing alt text. The alt text should describe the purpose of the link.</li>
79
+ <li>error: This element has insufficient contrast at this conformance level. Expected a contrast ratio of at least 4.5:1, but text in this element has a contrast ratio of 3.32:1. Recommendation: change background to #0e7cba.</li>
80
+ </ul>
81
+ <p><a href="https://github.com/paypal/AATT">AATT</a> is an open-source package sponsored by PayPal. The <code>aatt</code> test performs all 98 WCAG 2.1 AA tests in the HTML CodeSniffer ruleset.</p>
82
+ <h3><code>alfa</code></h3>
83
+ <p>The page <strong>did not pass</strong> the <code>alfa</code> test and received a score of 178 on <code>alfa</code>. The details are in the appended report, in the section starting with <code>"which": "alfa"</code>. There was at least one failure of:</p>
84
+ <ul>
85
+ <li>warning: Element in sequential focus order has visible focus</li>
86
+ <li>warning: Text outside widget has enhanced contrast</li>
87
+ <li>warning: Text outside widget has minimum contrast</li>
88
+ <li>warning: First focusable element is link to main content</li>
89
+ <li>error: Links have an accessible name</li>
90
+ <li>error: &lt;meta name='viewport'> elements do not prevent zoom</li>
91
+ <li>error: Headings are structured</li>
92
+ <li>error: Text outside widget has enhanced contrast</li>
93
+ <li>error: Text outside widget has minimum contrast</li>
94
+ <li>error: Paragraphs of text have sufficient line height</li>
95
+ <li>error: Headings of same level have text content between them</li>
96
+ <li>error: Form fields have an accessible name</li>
97
+ </ul>
98
+ <p><a href="https://github.com/Siteimprove/alfa">Alfa</a> is an open-source package sponsored by Siteimprove. The <code>alfa</code> test performs all 103 tests in the Alfa package.</p>
99
+ <h3><code>axe</code></h3>
100
+ <p>The page <strong>did not pass</strong> the <code>axe</code> test and received a score of 38 on <code>axe</code>. The details are in the appended report, in the section starting with <code>"which": "axe"</code>. There was at least one failure of:</p>
101
+ <ul>
102
+ <li>color-contrast: Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds</li>
103
+ <li>heading-order: Ensures the order of headings is semantically correct</li>
104
+ <li>label: Ensures every form element has a label</li>
105
+ <li>landmark-unique: Landmarks should have a unique role or role/label/title (i.e. accessible name) combination</li>
106
+ <li>link-name: Ensures links have discernible text</li>
107
+ <li>list: Ensures that lists are structured correctly</li>
108
+ <li>meta-viewport: Ensures &lt;meta name="viewport"> does not disable text scaling and zooming</li>
109
+ <li>region: Ensures all page content is contained by landmarks</li>
110
+ </ul>
111
+ <p><a href="https://github.com/dequelabs/axe-core">Axe</a> is an open-source package sponsored by accessibility consulting firm Deque. The <code>axe</code> test performs all 138 default tests in the Axe package.</p>
112
+ <h3><code>ibm</code></h3>
113
+ <p>The page <strong>did not pass</strong> the <code>ibm</code> test and received a score of 145 on <code>ibm</code>. The details are in the appended report, in the section starting with <code>"which": "ibm"</code>. There was at least one failure of:</p>
114
+ <ul>
115
+ <li>WCAG20_Label_RefValid: The value "" of the 'for' attribute is not the 'id' of a valid &lt;input> element</li>
116
+ <li>WCAG20_Input_ExplicitLabel: Form control element &lt;input> has no associated label</li>
117
+ <li>WCAG20_Input_ExplicitLabel: Form control element &lt;button> has no associated label</li>
118
+ <li>WCAG20_Img_HasAlt: Image does not have an 'alt' attribute short text alternative</li>
119
+ <li>WCAG20_A_HasText: Hyperlink has no link text, label or image with a text alternative</li>
120
+ <li>RPT_Label_UniqueFor: Form control has more than one label</li>
121
+ <li>Rpt_Aria_OrphanedContent_Native_Host_Sematics: Content is not within a landmark element</li>
122
+ <li>Rpt_Aria_MultipleNavigationLandmarks_Implicit: Multiple elements with "navigation" role do not have unique labels</li>
123
+ <li>Rpt_Aria_ComplementaryRequiredLabel_Implicit: The element with "complementary" role does not have a label</li>
124
+ <li>landmark_name_unique: Multiple "navigation" landmarks with the same parent region are not distinguished from one another because they have the same "" label</li>
125
+ <li>HAAC_Figure_label: The &lt;figure> element does not have an associated label</li>
126
+ <li>element_attribute_deprecated: The HTML attribute(s) "http-equiv" is deprecated for the &lt;meta> element in HTML 5</li>
127
+ <li>aria_role_redundant: The explicitly-assigned ARIA role "main" is redundant with the implicit role of the element &lt;main></li>
128
+ <li>IBMA_Color_Contrast_WCAG2AA: Text contrast of 2.22 with its background is less than the WCAG AA minimum requirements for text of size 18px and weight of 700</li>
129
+ <li>IBMA_Color_Contrast_WCAG2AA: Text contrast of 1.17 with its background is less than the WCAG AA minimum requirements for text of size 22px and weight of 700</li>
130
+ <li>IBMA_Color_Contrast_WCAG2AA: Text contrast of 1.17 with its background is less than the WCAG AA minimum requirements for text of size 40px and weight of 700</li>
131
+ <li>IBMA_Color_Contrast_WCAG2AA: Text contrast of 3.13 with its background is less than the WCAG AA minimum requirements for text of size 14px and weight of 400</li>
132
+ </ul>
133
+ <p><a href="https://github.com/IBMa/equal-access">Equal Access</a> is an open-source package sponsored by IBM Corporation. The <code>ibm</code> test performs all 163 default tests in the Equal Access package.</p>
134
+ <h3><code>tenon</code></h3>
135
+ <p>The page <strong>did not pass</strong> the <code>tenon</code> test and received a score of 91 on <code>tenon</code>. The details are in the appended report, in the section starting with <code>"which": "tenon"</code>. There was at least one failure of:</p>
136
+ <ul>
137
+ <li>The layout or sizing of this page causes horizontal scrolling.</li>
138
+ <li>This link has no text inside it.</li>
139
+ <li>This element has insufficient color contrast (Level AAA).</li>
140
+ <li>Very small text found.</li>
141
+ <li>This content's line height is insufficent to properly display the computed element font size.</li>
142
+ <li>This actionable element is smaller than the minimum required size.</li>
143
+ <li>These headings are not structured in a hierarchical manner.</li>
144
+ </ul>
145
+ <p>The <a href="https://tenon.io/documentation/apiv2.php">Tenon Test API (version 2)</a> is a proprietary package owned by Level Access. The <code>tenon</code> test performs all 180 default tests in the Tenon package.</p>
146
+ <h3><code>wave</code></h3>
147
+ <p>The page <strong>did not pass</strong> the <code>wave</code> test and received a score of 125 on <code>wave</code>. The details are in the appended report, in the section starting with <code>"which": "wave"</code>. There was at least one failure of:</p>
148
+ <ul>
149
+ <li>error/alt_missing: Missing alternative text</li>
150
+ <li>error/alt_link_missing: Linked image missing alternative text</li>
151
+ <li>error/label_missing: Missing form label</li>
152
+ <li>error/button_empty: Empty button</li>
153
+ <li>error/link_empty: Empty link</li>
154
+ <li>contrast/contrast: Very low contrast</li>
155
+ <li>alert/heading_skipped: Skipped heading level</li>
156
+ <li>alert/heading_possible: Possible heading</li>
157
+ <li>alert/link_internal_broken: Broken same-page link</li>
158
+ <li>alert/noscript: Noscript element</li>
159
+ <li>alert/html5_video_audio: HTML5 video or audio</li>
160
+ </ul>
161
+ <p><a href="https://wave.webaim.org/">WAVE</a> is a proprietary package owned by webAIM, a program of the Institute for Disability Research, Policy, and Practice at Utah State University. The <code>wave</code> test performs all 110 default tests in the WAVE package.</p>
162
+ <h2>Custom tests</h2>
163
+ <p>The tests in the above packages are designed to detect some, not all, accessibility problems. The procedure includes the following 16 custom tests that supplement the tests of the packages.</p>
164
+ <h3><code>bulk</code></h3>
165
+ <p>The page <strong>passed</strong> the <code>bulk</code> test.</p>
166
+ <p>The <code>bulk</code> test counts the initially visible elements in a page. A page with a large count tends to be complex and busy, frustrating some users, especially if they have visual or motor disabilities, as they try to determine what the page is about, whether it is relevant, and how to find a specific thing in it.</p>
167
+ <p>When the count exceeds 250, the procedure begins to assign a non-zero score.</p>
168
+ <h3><code>embAc</code></h3>
169
+ <p>The page <strong>passed</strong> the <code>embAc</code> test.</p>
170
+ <p>The <code>embAc</code> test detects improper embedding of interactive elements (links, buttons, inputs, and select lists) within links or buttons. Such embedding violates the HTML standard, complicates user interaction, and creates risks of error. It becomes non-obvious what a user will activate with a click.</p>
171
+ <h3><code>focAll</code></h3>
172
+ <p>The page <strong>did not pass</strong> the <code>focAll</code> test and received a score of 3 on <code>focAll</code>. The details are in the appended report, in the section starting with <code>"which": "focAll"</code>.</p>
173
+ <p>Summary of the details:</p>
174
+ <ul>
175
+ <li>tabFocusables: 46</li>
176
+ <li>tabFocused: 45</li>
177
+ <li>discrepancy: -1</li>
178
+ </ul>
179
+ <p>The <code>focAll</code> test detects discrepancies between focusable and Tab-focused element counts. Navigating with the Tab key normally moves the focus and does nothing else. If it also adds or fails to focus focusable elements, this complicates navigation and may make the page unusable for people who must use only a keyboard (not a mouse) or a keyboard-emulating assistive device to navigate.</p>
180
+ <h3><code>focInd</code></h3>
181
+ <p>The page <strong>did not pass</strong> the <code>focInd</code> test and received a score of 530 on <code>focInd</code>. The details are in the appended report, in the section starting with <code>"which": "focInd"</code>.</p>
182
+ <p>Summary of the details:</p>
183
+ <ul>
184
+ <li>indicatorMissing: 106</li>
185
+ <li>nonOutlinePresent: 0</li>
186
+ </ul>
187
+ <p>The <code>focInd</code> test detects focusable elements without standard focus indicators. An outline is the standard and most recognizable focus indicator; as you repeatedly press the Tab key, the outline moves through the page. Other focus indicators are more likely to be misunderstood. For example, underlines may be mistaken for selection indicators or links. An absent focus indicator prevents the user from knowing what a keyboard action will act on.</p>
188
+ <h3><code>focOp</code></h3>
189
+ <p>The page <strong>did not pass</strong> the <code>focOp</code> test and received a score of 34 on <code>focOp</code>. The details are in the appended report, in the section starting with <code>"which": "focOp"</code>.</p>
190
+ <p>Summary of the details:</p>
191
+ <ul>
192
+ <li>onlyFocusable: 2</li>
193
+ <li>onlyOperable: 8</li>
194
+ </ul>
195
+ <p>The <code>focOp</code> test detects descrepancies between Tab-focusability and operability. The standard practice is to make focusable elements operable and vice versa. If focusable elements are not operable, users are likely to be surprised that nothing happens when they try to operate such elements. If operable elements are not focusable, users depending on keyboard navigation are prevented from operating those elements. The test considers an element operable if it has a non-inherited pointer cursor and is not a <code>LABEL</code> element, or has an operable tag name (<code>A</code>, <code>BUTTON</code>, <code>IFRAME</code>, <code>INPUT</code>, <code>SELECT</code>, or <code>TEXTAREA</code>), or has an <code>onclick</code> attribute. The test considers an element Tab-focusable if its <code>tabIndex</code> property has the value 0.</p>
196
+ <h3><code>hover</code></h3>
197
+ <p>The page <strong>did not pass</strong> the <code>hover</code> test and received a score of 28 on <code>hover</code>. The details are in the appended report, in the section starting with <code>"which": "hover"</code>.</p>
198
+ <p>Summary of the details:</p>
199
+ <ul>
200
+ <li>triggers: 0</li>
201
+ <li>madeVisible: 0</li>
202
+ <li>opacityChanged: 0</li>
203
+ <li>opacityAffected: 0</li>
204
+ <li>unhoverables: 14</li>
205
+ </ul>
206
+ <p>The <code>hover</code> test detects unexpected effects of hovering. The normal purpose of hovering is to show the user which element is currently being actually or effectively hovered over and would therefore be the target of a mouse click. When hovering does more than that, the additional effects can confuse or startle users, especially those without precise mouse control. The test detects whether hovering makes elements visible, changes the opacities of elements, affects the opacities of elements by changing the opacities of their ancestors, and fails to reach elements. Only visible elements that have <code>A</code>, <code>BUTTON</code>, and <code>LI</code> tag names or have <code>onmouseenter</code> or <code>onmouseover</code> attributes are considered as triggers of such effects when hovered over. The effects of hovering are inspected for the descendants of the grandparent of the trigger if the trigger has the tag name <code>A</code> or <code>BUTTON</code>, or otherwise the descendants of the trigger. The only elements counted as being made visible by hovering are those with tag names <code>A</code>, <code>BUTTON</code>, <code>INPUT</code>, and <code>SPAN</code>, and those with <code>role="menuitem"</code> attributes.</p>
207
+ <h3><code>labClash</code></h3>
208
+ <p>The page <strong>did not pass</strong> the <code>labClash</code> test and received a score of 30 on <code>labClash</code>. The details are in the appended report, in the section starting with <code>"which": "labClash"</code>.</p>
209
+ <p>Summary of the details:</p>
210
+ <ul>
211
+ <li>mislabeled: 0</li>
212
+ <li>unlabeled: 15</li>
213
+ </ul>
214
+ <p>The <code>labClash</code> test detects defects in the labeling of buttons, non-hidden inputs, select lists, and text areas. The defects include missing labels and redundant labels. Redundant labels are labels that are superseded by other labels. Explicit and implicit (wrapped) labels are additive, not conflicting.</p>
215
+ <h3><code>linkUl</code></h3>
216
+ <p>The page <strong>did not pass</strong> the <code>linkUl</code> test and received a score of 30 on <code>linkUl</code>. The details are in the appended report, in the section starting with <code>"which": "linkUl"</code>.</p>
217
+ <p>Summary of the details:</p>
218
+ <ul>
219
+ <li>total: 10</li>
220
+ <li>underlined: 0</li>
221
+ <li>underlinedPercent: 0</li>
222
+ </ul>
223
+ <p>The <code>linkUl</code> test detects failures to underline inline links. Underlining and color are the traditional style properties that identify links. Collections of links in blocks can sometimes be recognized without underlines, but inline links are difficult or impossible to distinguish visually from surrounding text if not underlined. Underlining inline links only on hover provides an indicator valuable only to mouse users, and even they must traverse the text with a mouse merely to discover which passages are links.</p>
224
+ <p>Warning: This test classifies links as inline or block. Some links classified as inline may not look like inline links to users.</p>
225
+ <h3><code>log</code></h3>
226
+ <p>The page <strong>did not pass</strong> the <code>log</code> test and received a score of 34 on <code>log</code>. The details are in the appended report, in the section starting with <code>"which": "log"</code>.</p>
227
+ <p>Summary of the details:</p>
228
+ <ul>
229
+ <li>logCount: 11</li>
230
+ <li>logSize: 2854</li>
231
+ <li>visitRejectionCount: 0</li>
232
+ <li>prohibitedCount: 0</li>
233
+ <li>visitTimeoutCount: 0</li>
234
+ </ul>
235
+ <p>The <code>log</code> test detects problems with the behavior of the page or the server. Indicators of such problems are the number of messages logged by the browser, the aggregate size of those messages in characters, the number of rejections with abnormal HTTP statuses, the number of <q>prohibited</q> HTTP statuses, and the number of times the browser timed out trying to reach the page. Although log messages do not always indicate page defects, they mostly do.</p>
236
+ <h3><code>menuNav</code></h3>
237
+ <p>The page <strong>passed</strong> the <code>menuNav</code> test.</p>
238
+ <p>The <code>menuNav</code> test detects nonstandard keyboard navigation among menu items in menus that manage the focus of their menu items. Menus that use pseudofocus with the <code>aria-activedescendant</code> attribute are not tested. The test is based on <a href="https://www.w3.org/TR/wai-aria-practices-1.1/#menu">WAI-ARIA recommendations</a>.</p>
239
+ <h3><code>motion</code></h3>
240
+ <p>The page <strong>did not pass</strong> the <code>motion</code> test and received a score of 74 on <code>motion</code>. The details are in the appended report, in the section starting with <code>"which": "motion"</code>.</p>
241
+ <p>Summary of the details:</p>
242
+ <ul>
243
+ <li>bytes: 669014, 660861, 902013, 897820, 663921</li>
244
+ <li>localRatios: 1.012, 1.365, 1.005, 1.352</li>
245
+ <li>meanLocalRatio: 1.183</li>
246
+ <li>maxLocalRatio: 1.365</li>
247
+ <li>globalRatio: 1.365</li>
248
+ <li>pixelChanges: 49155, 430502, 122779, 421139</li>
249
+ <li>meanPixelChange: 255893</li>
250
+ <li>maxPixelChange: 430502</li>
251
+ <li>changeFrequency: 1</li>
252
+ </ul>
253
+ <p>The <code>motion</code> test detects unrequested motion in a page. Accessibility standards minimally require motion to be brief, or else stoppable by the user. But stopping motion can be difficult or impossible, and, by the time a user manages to stop motion, the motion may have caused annoyance or harm. For superior accessibility, a page contains no motion until and unless the user authorizes it. The test compares five screen shots of the initially visible part of the page and assigns a score based on:</p>
254
+ <ol>
255
+ <li>bytes: an array of the sizes of the screen shots, in bytes</li>
256
+ <li>localRatios: an array of the ratios of bytes of the larger to the smaller of adjacent pairs of screen shots</li>
257
+ <li>meanLocalRatio: the mean of the ratios in the localRatios array</li>
258
+ <li>maxLocalRatio: the greatest of the ratios in the localRatios array</li>
259
+ <li>globalRatio: the ratio of bytes of the largest to the smallest screen shot</li>
260
+ <li>pixelChanges: an array of counts of differing pixels between adjacent pairs of screen shots</li>
261
+ <li>meanPixelChange: the mean of the counts in the pixelChanges array</li>
262
+ <li>maxPixelChange: the greatest of the counts in the pixelChanges array</li>
263
+ <li>changeFrequency: what fraction of the adjacent pairs of screen shots has pixel differences</li>
264
+ </ol>
265
+ <p>Warning: This test waits 2.4 seconds before making its first screen shot. If a page loads more slowly than that, the test may treat it as exhibiting motion.</p>
266
+ <h3><code>radioSet</code></h3>
267
+ <p>The page <strong>passed</strong> the <code>radioSet</code> test.</p>
268
+ <p>The <code>radioSet</code> test detects nonstandard groupings of radio buttons. It defines the standard to require that two or more radio buttons with the same name, and no other radio buttons, be grouped in a <code>fieldset</code> element with a valid <code>legend</code> element.</p>
269
+ <h3><code>role</code></h3>
270
+ <p>The page <strong>did not pass</strong> the <code>role</code> test and received a score of 2 on <code>role</code>. The details are in the appended report, in the section starting with <code>"which": "role"</code>.</p>
271
+ <p>Summary of the details:</p>
272
+ <ul>
273
+ <li>roleElements: 1</li>
274
+ <li>badRoleElements: 1</li>
275
+ </ul>
276
+ <p>The <code>role</code> test detects nonstandard and confusing role assignments. It is inspired by the <a href="https://www.w3.org/TR/wai-aria/#roles_categorization">WAI-ARIA recommendations on roles</a> and their <a href="https://www.w3.org/TR/html-aria/">authoring rules</a>. Abstract roles and roles that are implicit in HTML elements fail the test. The <code>math</code> role has been removed, because of poor adoption and exclusion from HTML5. The <code>img</code> role <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/img_role">has accessibility uses</a>, so does not fail the test, although implicit in the HTML <code>img</code> element.</p>
277
+ <h3><code>styleDiff</code></h3>
278
+ <p>The page <strong>did not pass</strong> the <code>styleDiff</code> test and received a score of 35 on <code>styleDiff</code>. The details are in the appended report, in the section starting with <code>"which": "styleDiff"</code>.</p>
279
+ <p>Summary of the details:</p>
280
+ <ul>
281
+ <li>h1: 1 style</li>
282
+ <li>h2: 1 style</li>
283
+ <li>h3: 1 style</li>
284
+ <li>h4: 2 different styles</li>
285
+ <li>h5: 2 different styles</li>
286
+ <li>aInline: 3 different styles</li>
287
+ <li>aBlock: 10 different styles</li>
288
+ <li>button: 2 different styles</li>
289
+ </ul>
290
+ <p>The <code>styleDiff</code> test detects style inconsistencies among inline links, block links, buttons, and all 6 levels of headings. The principle of consistent identification requires using styles to help users classify content. For example, level-2 headings look the same, and they look different from level-1 headings. Ideally, then, for each of these element types, there would be exactly 1 style. The test considers the style properties <code>borderStyle</code>, <code>borderWidth</code>, <code>fontStyle</code>, <code>fontWeight</code>, <code>lineHeight</code>, <code>maxHeight</code>, <code>maxWidth</code>, <code>minHeight</code>, <code>minWidth</code>, <code>opacity</code>, <code>outlineOffset</code>, <code>outlineStyle</code>, <code>outlineWidth</code>, <code>textDecorationLine</code>, <code>textDecorationStyle</code>, and <code>textDecorationThickness</code>. For headings, it also considers the <code>fontSize</code> style property.</p>
291
+ <h3><code>tabNav</code></h3>
292
+ <p>The page <strong>passed</strong> the <code>tabNav</code> test.</p>
293
+ <p>The <code>tabNav</code> test detects <a href="https://www.w3.org/TR/wai-aria-practices-1.1/#tabpanel">nonstandard keyboard navigation</a> among tab elements in tab lists. Tab lists let users choose which of several content blocks to display. The Tab key moves the focus into and out of a tab list, but the arrow, Home, and End keys move the focus from tab to tab.</p>
294
+ <h3><code>zIndex</code></h3>
295
+ <p>The page <strong>did not pass</strong> the <code>zIndex</code> test and received a score of 33 on <code>zIndex</code>. The details are in the appended report, in the section starting with <code>"which": "zIndex"</code>.</p>
296
+ <p>Summary of the details:</p>
297
+ <ul>
298
+ <li>DIV: 10</li>
299
+ <li>VIDEO: 1</li>
300
+ </ul>
301
+ <p>The <code>zIndex</code> test detects elements with non-default z indexes. Pages present difficulty for some users when they require users to perceive a third dimension (depth) in the two-dimensional display. Layers, popups, and dialogs that cover other content make it difficult for some users to interpret the content and know what parts of the content can be acted on. Layering also complicates accessibility testing. Tests for visibility of focus, for example, may fail if a focused element is covered by another element.</p>
302
+ <h2>Test prevention</h2>
303
+ <p>Some pages prevent some of the tests in this procedure from being performed. This may occur, for example, when a page tries to block any non-human visitor. The procedure estimates high scores when pages prevent tests, because preventing accessibility testing is itself an accessibility deficiency. Specifically:</p>
304
+ <ul>
305
+ <li>Measuring success is a prerequisite for achieving success, so interfering with accessibility measurement interferes with accessibility.</li>
306
+ <li>Users with disabilities often rely on assistive technologies to mediate between them and web applications. Applications that interfere with automated testing are at risk of interfering with some assistive technologies, too.</li>
307
+ </ul>
308
+ <footer>
309
+ <p class="date">Produced <time itemprop="datePublished" datetime="2022-06-03">2022/06/03</time></p>
310
+ </footer>
311
+ </main>
312
+ </body>
313
+ </html>