Accessibility digest

Contents

Synopsis
PagePhillip Beachy;Independent;Indiana
URLhttps://beachyforsenate.com
Test date2024/09/22
Score901
Configuration
Redirectionspermitted
Tool isolationno
Report format(s)standard
Requester
Devicedefault
Browser typewebkit
Reduced motionnot requested
Tested byTestaro, procedure senate2024
Scored byTestilo, procedure tsp50
Digested byTestilo, procedure tdp50
Full report 240915T1658-ikz-0j.json

Introduction

How accessible is the Phillip Beachy;Independent;Indiana web page at https://beachyforsenate.com?

This digest gives one answer to that question. Eleven different tools (Alfa, ASLint, Axe, Editoria11y, Equal Access, HTML CodeSniffer, Nu Html Checker, QualWeb, Testaro, WAVE, and WallyAX) tested the page to check its compliance with their accessibility rules. In all, the tools define about a thousand rules, which are classified here into about three hundred accessibility issues.

The results were interpreted to yield a score, with 0 being ideal. The score for this page was 901, the sum of 260 for the count of issues, 145 for specific issues, 0 for unclassified rule violations, 35 for tool-by-tool ratings, 130 for the count of violating elements, 300 for the page preventing tools from running, 31 for browser warnings, and 0 for delayed page responses.

How the page was scored

Introduction

This is an explanation of the scoring of the page.

Motivations for scoring

Why score? Specifically, why aggregate many facts about a page into a single number?

One motivation is to simplify comparison and tracking. If you want to compare a page with other pages, or if you want to track changes in a page over time, aggregating many test results for each page into one page score simplifies the task. It becomes possible to say things like Page A is more accessible than page B or Page A is becoming more accessible over time.

Another motivation is to influence behavior. A score arises from decisions about importance, urgency, and other attributes. People may use scores to award benefits, impose costs, or prioritize work. So, scoring can influence who gets and does what.

How to score?

Scoring is subjective. Accessibility testing tools use various scoring procedures, based on various ideas.

The built-in scoring procedures of Testilo are based on the idea that multiple attributes should affect a web-page accessibility score, including:

Some ideas found elsewhere in accessibility scoring are rejected by the Testilo procedures:

Scoring method summary

The scoring method is found in the code of the procedure. The file for any procedure tspnn is in the file procs/score/tspnn.js within the Testilo package.

The score computed by this procedure for any page is a non-negative number. The numbers represent accessibility faults, so a higher-scoring page is considered less accessible than a lower-scoring page. The best possible score is 0.

The procedure makes the score of a page the sum of 7 components:

Scoring method details

The above component descriptions omit various details.

About a thousand tool rules are classified into issues in the tic50.js file used by this procedure. Each of those rules has a quality, ranging from 0 to 1. When the issue score is computed, the count of violations of each rule is multiplied by the quality of that rule. Whichever tool has the largest quality-weighted violation count for an issue, that count is treated as the instance count for the issue. Thus, if 8 tools each report 15 violations within the issue, and their rule qualities are all 1, the instance count is 15, not 120. Moreover, the issue itself has a weight, ranging from 1 to 4, representing its importance. This instance count is multiplied by that weight. That product is further multiplied by the issueCountWeight value, namely 10. That final product is further adjusted if the issue is inherently limited in instance count. For example, if the issue is that the page html element has no lang attribute, the instance count is limited to 1. If there is such a limit, the maxWeight value, namely 30, is divided by the actual instance count and the quotient is added to 1. That product (or 1 if there is no limit) is multiplied by the instance count, and then the result is treated as the contribution of the issue to the issue score.

Each solo (not yet issue-classified) rule violation is multiplied by the sum of 1 and the ordinal severity of the rule, to produce the solo score.

Each rule violation reported by each tool is severity-weighted in the same way as solo rule violations are. Then the sum of those violations is multiplied by the toolWeight value, namely 0.1, to produce the tool score.

The count of elements reported as violators of any rule is multiplied by the elementWeight value, namely 2, to produce the element score.

The count of prevented Testaro rules is multiplied by the testaroRulePreventionWeight quantity, namely 30, and the count of other prevented tools is multiplied by the preventionWeight value, namely 300, to produce the prevention score.

The log score is the sum of several components:

Each of these components is multiplied by a weight found in the logWeights object.

Finally, the latency score is based on how much longer it took for the page to become loaded and stable than expected. The expected total duration in seconds is the normalLatency value, namely 22 seconds (that is 2 seconds per visit, multiplied by the 11 visits of the 11 tools). This is subtracted from the actual total latency, and that difference is multiplied by the latencyWeight amount, namely 2.

Issue summary

Details about this summary

The summary

Sorting is by score.

How many violations each tool reported, by issue
IssueWCAGWeightScoreInstance counts
heading-like styles dubious1.3.1124ed11y:8, htmlcs:1, wave:24, axe:0
CSS invalid4.1318nuVal:6
void element has trailing slash4.1112nuVal:12
title attribute invalid1.3.1412testaro:3
target small2.5.5111alfa:11, testaro:6
link destination not URL1.3.119aslint:9
button not named4.1.248aslint:2, alfa:0, axe:0, htmlcs:0, nuVal:0, qualWeb:0, wave:0, wax:0
figure not named1.1.148ibm:2
link indication poor1.3.328testaro:4, alfa:0, axe:0
contrast poor1.4.344axe:1, alfa:0, aslint:0, htmlcs:0, ibm:0, qualWeb:0, wave:0, wax:0
line height low1.4.824testaro:2, alfa:0
inconsistent heading, link, or button styles3.2.414testaro:4
element beyond display when focused1.4.1033testaro:1
text contrast improvable1.4.612alfa:2, aslint:2, axe:2, htmlcs:2, qualWeb:2, wax:0
link href missing1.3.122aslint:1, testaro:1, htmlcs:0, nuVal:0
image dubiously marked decorative1.1.112htmlcs:2
link incomplete1.3.122htmlcs:1, wax:0
element not focusable2.1.142testaro:1, alfa:0, qualWeb:0
links named identically2.4.422testaro:1, aslint:0, qualWeb:0
text and image link not combined2.4.422wave:1, aslint:0, qualWeb:0
all-capital text3.1.511aslint:1, alfa:0, ed11y:0, testaro:0
list not marked as such?1.3.111ed11y:1, htmlcs:0, wave:0
text contrast not testable1.4.311htmlcs:1, alfa:0, aslint:0
content beyond landmarks1.3.611ibm:1, alfa:0, axe:0, wax:0
overflow hidden?1.4.411qualWeb:1
z-index not zero1.411testaro:1

Itemized issues

The reported rule violations are itemized below, issue by issue. Additional details can be inspected in the full report.

Issue: heading-like styles dubious

Impact: User may be unable to understand the topic of a part of the document

WCAG: 1.3.1

Score: 24

Elements

Violations of ed11y rules

Rule textPossibleHeading

Description: Styled p element may be misused as a heading

Count of instances: 8

Violations of htmlcs rules

Rule AAA.1_3_1.H42

Description: Heading coding is not used but the element may be intended as a heading

Count of instances: 1

Violations of wave rules

Rule heading_possible

Description: Possible heading

Count of instances: 24

Issue: CSS invalid

Impact: Document cannot be properly displayed

WCAG: 4.1

Score: 18

Elements

None identified

Violations of nuVal rules

Rule ^CSS: .+: Property .+ doesn't exist.*$

Description: Invalid property in CSS

Count of instances: 4

Rule ^CSS: .+: .+ is not a .+ value.*$

Description: Invalid value in CSS

Count of instances: 2

Issue: void element has trailing slash

Impact: Document contains invalid code

WCAG: 4.1

Score: 12

Elements

Violations of nuVal rules

Rule Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

Description: Void element has a useless trailing slash.

Count of instances: 12

Issue: title attribute invalid

Impact: User cannot hover to get help explaining an item

WCAG: 1.3.1

Score: 12

Elements

Violations of testaro rules

Rule titledEl

Description: title attribute belongs to an inappropriate element

Count of instances: 3

Issue: target small

Impact: User cannot reliably choose an item to click or tap

WCAG: 2.5.5

Score: 11

Elements

Violations of alfa rules

Rule r111

Description: Target size is suboptimal

Count of instances: 11

Violations of testaro rules

Rule targetSize

Description: Button, input, or non-inline link is smaller than 44 px wide and high

Count of instances: 6

Issue: link destination not URL

Impact: Helper cannot properly explain a link to a user

WCAG: 1.3.1

Score: 9

Elements

Violations of aslint rules

Rule unclear_anchor_uri

Description: Link destination is #, a script, or empty

Count of instances: 9

Issue: button not named

Impact: User cannot get help explaing a button

WCAG: 4.1.2

Score: 8

Elements

Violations of aslint rules

Rule empty_button_description

Description: button element has no visible accessible name

Count of instances: 2

Issue: figure not named

Impact: User cannot get help on the topic of a figure

WCAG: 1.1.1

Score: 8

Elements

Violations of ibm rules

Rule figure_label_exists

Description: figure element has no associated label

Count of instances: 2

Issue: link indication poor

Impact: User cannot differentiate a link from plain text

WCAG: 1.3.3

Score: 8

Elements

Violations of testaro rules

Rule linkUl

Description: Inline links are not underlined

Count of instances: 4

Issue: contrast poor

Impact: Content is difficult to understand

WCAG: 1.4.3

Score: 4

Elements

Violations of axe rules

Rule color-contrast

Description: Element has insufficient color contrast

Count of instances: 1

Issue: line height low

Impact: Text is difficult to read

WCAG: 1.4.8

Score: 4

Elements

Violations of testaro rules

Rule lineHeight

Description: Text has a line height less than 1.5 times its font size

Count of instances: 2

Issue: inconsistent heading, link, or button styles

Impact: User cannot easily distinguish items of different types

WCAG: 3.2.4

Score: 4

Elements

None identified

Violations of testaro rules

Rule styleDiff

Description: Heading, link, and button style inconsistencies

Count of instances: 4

Issue: element beyond display when focused

Impact: Keyboard-only user cannot navigate properly to the operable items

WCAG: 1.4.10

Score: 3

Elements

Violations of testaro rules

Rule focVis

Description: Element when focused is off the display

Count of instances: 1

Issue: text contrast improvable

Impact: Content is not easy to understand

WCAG: 1.4.6

Score: 2

Elements

Violations of alfa rules

Rule r66

Description: Text contrast less than AAA requires

Count of instances: 2

Violations of aslint rules

Rule color_contrast_aaa7

Description: Text has contrast less than 7:1

Count of instances: 2

Violations of axe rules

Rule color-contrast-enhanced

Description: Element has insufficient color contrast (Level AAA)

Count of instances: 2

Violations of htmlcs rules

Rule AAA.1_4_6.G17.Fail

Description: Text has insufficient contrast

Count of instances: 2

Violations of qualWeb rules

Rule QW-ACT-R76

Description: Text has less than the enhanced minimum contrast

Count of instances: 2

Issue: link href missing

Impact: Helper cannot properly explain a link to a user

WCAG: 1.3.1

Score: 2

Elements

Violations of aslint rules

Rule missing_href_on_a

Description: Link has no href attribute

Count of instances: 1

Violations of testaro rules

Rule linkTo

Description: Link has no href attribute

Count of instances: 1

Issue: image dubiously marked decorative

Impact: Helper ignores an image that is apparently informative

WCAG: 1.1.1

Score: 2

Elements

None identified

Violations of htmlcs rules

Rule AAA.1_1_1.H67.2

Description: Image marked as decorative may be informative

Count of instances: 2

Issue: link incomplete

Impact: User may fail to reach a promised location

WCAG: 1.3.1

Score: 2

Elements

None identified

Violations of htmlcs rules

Rule AAA.4_1_2.H91.A.Placeholder

Description: Link has text but no href, id, or name attribute

Count of instances: 1

Issue: element not focusable

Impact: Keyboard-only user cannot choose an item to operate

WCAG: 2.1.1

Score: 2

Elements

None identified

Violations of testaro rules

Rule focAll

Description: Discrepancy between elements that should be and that are Tab-focusable

Count of instances: 1

Issue: links named identically

Impact: User cannot get help differentiating links

WCAG: 2.4.4

Score: 2

Elements

Violations of testaro rules

Rule linkAmb

Description: Links with the same text content have different destinations

Count of instances: 1

Issue: text and image link not combined

Impact: Keyboard-only user expends extra effort to skip a link

WCAG: 2.4.4

Score: 2

Elements

Violations of wave rules

Rule link_redundant

Description: Adjacent links go to the same URL

Count of instances: 1

Issue: all-capital text

Impact: Text is difficult to read

WCAG: 3.1.5

Score: 1

Elements

Violations of aslint rules

Rule capital_letters_words

Description: Element or its title has entirely upper-case words

Count of instances: 1

Issue: list not marked as such?

Impact: User may be unable to get help on which items are in lists

WCAG: 1.3.1

Score: 1

Elements

Violations of ed11y rules

Rule textPossibleList

Description: List may be miscoded as a paragraph sequence

Count of instances: 1

Issue: text contrast not testable

Impact: Text may be difficult to read

WCAG: 1.4.3

Score: 1

Elements

None identified

Violations of htmlcs rules

Rule AAA.1_4_6.G17.Abs

Description: Contrast between the absolutely positioned text and its background may be less than 7:1

Count of instances: 1

Issue: content beyond landmarks

Impact: User cannot get help on how some of the document is organized

WCAG: 1.3.6

Score: 1

Elements

Violations of ibm rules

Rule aria_content_in_landmark

Description: Content is not within a landmark element

Count of instances: 1

Issue: overflow hidden?

Impact: User may be unable to enlarge the text for readability

WCAG: 1.4.4

Score: 1

Elements

Violations of qualWeb rules

Rule QW-ACT-R40

Description: Zoomed text node may be clipped by a CSS overflow declaration

Count of instances: 1

Issue: z-index not zero

Impact: User cannot predict the effect of clicking

WCAG: 1.4

Score: 1

Elements

Violations of testaro rules

Rule zIndex

Description: Element has a nondefault z-index value

Count of instances: 1

Elements with issues

Elements exhibiting issues:

Element /html/body/a
Element /html/body/div/footer/div/div[1]/div[1]/div/p/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[1]/div/nav/ul/li[1]/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[1]/div/nav/ul/li[2]/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[1]/div/nav/ul/li[3]/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[2]/div/nav/ul/li[1]/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[2]/div/nav/ul/li[2]/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[2]/div/nav/ul/li[3]/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[3]/div/nav/ul/li[1]/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[3]/div/nav/ul/li[2]/a
Element /html/body/div/footer/div/div[1]/div[3]/div/div[3]/div/nav/ul/li[3]/a
Element /html/body/div/footer/div/div[2]/p
Element /html/body/div/footer/div/div[2]/p/a
Element /html/body/div/header/div/div/div[1]/div/p/a
Element /html/body/div/header/div/div/div[2]/nav/button
Element /html/body/div/header/div/div/div[2]/nav/div/div/div/button
Element /html/body/div/main/div[1]/div/h1
Element /html/body/div/main/div[1]/figure
Element /html/body/div/main/div[2]/div/div/ul/li/div/time
Element /html/body/div/main/div[3]/div/div[2]/div/a
Element /html/body/div/main/figure
Element /html/body/div/main/h2
Element /html/body/div/main/p[14]
Element /html/body/div/main/p[16]
Element /html/body/div/main/p[1]
Element /html/body/div/main/p[20]
Element /html/body/div/main/p[23]
Element /html/body/div/main/p[25]
Element /html/body/div/main/p[29]
Element /html/body/div/main/p[30]
Element /html/body/div/main/p[35]
Element /html/body/div/main/p[40]
Element /html/body/div/main/p[41]
Element /html/body/div/main/p[4]
Element /html/body/div/main/p[52]
Element /html/body/div/main/p[54]
Element /html/body/div/main/p[55]
Element /html/body/div/main/p[58]
Element /html/body/div/main/p[60]
Element /html/body/div/main/p[61]
Element /html/body/div/main/p[62]
Element /html/body/div/main/p[63]
Element /html/body/div/main/p[64]
Element /html/body/div/main/p[67]
Element /html/body/div/main/p[68]
Element /html/body/div/main/p[6]
Element /html/body/div/main/p[70]
Element /html/head
Element /html/head/link[1]
Element /html/head/link[2]
Element /html/head/link[6]