Hamcrest-Tests schreiben
Barrierefreiheitstests mit Hamcrest Matchers und Axe DevTools für Web für Java schreiben
Verwendung von Hamcrest Matchers mit Axe DevTools
Voraussetzungen
Um Barrierefreiheitstests zu schreiben und Ergebnisse zu erzielen, müssen Sie bereits eine Testdatei mit Axe DevTools erstellt und Ihre Wahl des Selenium WebDriver vorimportiert und vorinitialisiert haben. Falls Sie dies noch nicht getan haben, lesen Sie diese Anleitung, wie das geht.
Ein Satz von Matchern wurde für Barrierefreiheitstests über Hamcrest unter Verwendung von Selenium WebDriver bereitgestellt. Diese Matcher können in einem Unit-Test-Framework oder in benutzerdefinierten Cucumber-Schritten verwendet werden.
Wahl einer Scan-Methode
Wie in den Importanweisungen zu sehen ist, gibt es zwei Methoden zur Barrierefreiheitsprüfung. Die erste, isAxeClean, wirft eine Ausnahme und stoppt die Tests, wenn Verstöße gefunden werden. Die zweite, isAuditedForAccessibility, stoppt die Tests nicht und wirft keine Ausnahme, unabhängig vom Barrierefreiheitsgrad der gescannten Seite.
Tests schreiben
Für die restlichen Beispiele wird die Methode isAxeClean der Einfachheit halber gezeigt, aber beide Methoden funktionieren austauschbar. Mit Ihren instanziierten und initialisierten WebDriver- und AxeDriver-Objekten ist das Erstellen eines Scans so einfach wie das Hinzufügen dieser zwei Codezeilen zu einer Testmethode. Ersetzen Sie $URL durch die gewünschte URL der Seite, die Sie scannen möchten.
webDriver.get("$URL");
assertThat(axedriver, isAxeClean());Beim Testen mehrerer Seiten können Sie den Vorgang von Abrufen und Scannen wiederholen, ohne neue Instanzen der Treiber erstellen zu müssen. Um verschiedene Zustände einer Seite zu scannen, können Sie die Seite mit der WebDriver-API manipulieren und dann einen neuen Scan durchführen.
Zusätzliche Referenz
Es sind mehrere Verkettungsmethoden verfügbar, um die Art und Weise zu ändern, wie die Seite gescannt wird. Diese Methoden umfassen Ausschluss-/Einschlussklauseln oder das Scoping und die Änderungen der Barrierefreiheitsstandards, Barrierefreiheitsregeln und Barrierefreiheitsregelsets. Der Einfachheit halber sind alle Verkettungsmethoden mit isAxeClean() verbunden, aber sie sind austauschbar mit isAuditedForAccessibility().
Barrierefreiheitsstandards
Deque bietet eine Kettenmethode, gemäß, die direkt angibt, welche Barrierefreiheitsteststandards von einem Scan verwendet werden.
| Tag-Name | Barrierefreiheitsstandard |
|---|---|
| wcag2a | WCAG 2.0 Level A |
| wcag2aa | WCAG 2.0 Level AA |
| wcag2aaa | WCAG 2.0 Level AAA |
| wcag21a | WCAG 2.1 Level A |
| wcag21aa | WCAG 2.1 Level AA |
| wcag21aaa | WCAG 2.0 Level AAA |
| wcag22a | WCAG 2.2 Level A |
| wcag22aa | WCAG 2.2 Level AA |
| wcag22aaa | WCAG 2.2 Level AAA |
| section508 | Section 508 |
| EN-301-549 | EN 301 549 |
| RGAAv4 | RGAA Version 4 |
| TTv5 | Trusted Tester v5 |
| best-practice | Von Deque empfohlene Best Practices |
Wenn Sie sich nicht sicher sind, welcher Standard für Sie der richtige ist, lesen Sie die axe-core-Dokumentation darüber, welche Regeln mit welchem Standard verbunden sind, oder kontaktieren Sie uns über Ihren Deque-Ansprechpartner oder unser Helpdesk. Für eine vollständige Liste, welche Regeln für jeden Standard gelten, sehen Sie sich diese Seite zu Regelbeschreibungen an
Um einen einzelnen Standard zu verwenden, fügen Sie einfach die gemäß-Kettenmethode hinzu und übergeben Sie Ihren gewünschten Standard
assertThat(axedriver, isAxeClean().accordingTo("wcag2a"));Zusätzlich zur Verwendung eines Teststandards gibt es zwei Möglichkeiten, gegen zwei oder mehr Teststandards zu scannen. Beide funktionieren identisch.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a", "section508"));
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").accordingTo("section508"));Einschränkung
Deque bietet zwei verkettete Methoden, um die Einschränkung von Scans zu unterstützen. Die within()-Methode verändert den Scan so, dass nur die Seite innerhalb der Grenzen des angegebenen Selektors gescannt wird. Die excluding()-Methode funktioniert auf die entgegengesetzte Weise. Sie verändert den Scan so, dass Inhalte innerhalb des angegebenen Selektors ignoriert werden. Die unten stehenden Beispiele zeigen alle die within()-Methode, jedoch funktioniert die excluding()-Methode identisch.
Am einfachsten wird die Assertion mit einem Selektor modifiziert
assertThat(axedriver, isAxeClean().within("#selector1")); Es sind auch zusammengesetzte Selektoren möglich. Im unten stehenden Beispiel werden nur Elemente mit Selektor 2 innerhalb von Selektor 1 gescannt
assertThat(axedriver, isAxeClean().within("#selector1 .selector2"));Es gibt drei Möglichkeiten, eine Mehrfachauswahl durchzuführen oder mehrere Gültigkeitsbereiche für Tests auszuwählen. In all diesen Beispielen befinden sich Elemente innerhalb von Selektor 1 und Selektor 2.
assertThat(axedriver, isAxeClean().within("#selector1, .selector2"));
assertThat(axedriver, isAxeClean().within("#selector1", ".selector2"));
assertThat(axedriver, isAxeClean().within("#selector1").within(".selector2"));Um innerhalb eines IFrames einzuschränken, muss ein IFrame-Selektor deklariert werden. Der abzugrenzende Bereich innerhalb des IFrames wird als zusätzliches Argument übergeben.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "#selector1")));Die Einschränkung innerhalb mehrerer IFrames funktioniert genauso wie die standardmäßige Mehrfachauswahl. Man muss einfach zwei oder mehr IFrame-Selektoren durch Kommas getrennt erstellen.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "selector1"),
new IFrameSelector("#frame2", "#selector2")));Es ist auch möglich, innerhalb verschachtelter IFrames einzuschränken. Dieses Beispiel zeigt, wie ein Scan innerhalb von Selektor 1 eines IFrames durchgeführt wird, das sich in einem zweiten IFrame befindet.
assertThat(axedriver, isAxeClean().within(
new IFrameSelector("#frame1",
new IFrameSelector("#frame2", "#selector1"))));Schließlich ist es möglich, mehrere Gültigkeitsbereiche sowohl innerhalb einer Seite als auch innerhalb eines IFrames festzulegen. Dafür wird ein Elementselektor-Objekt benötigt.
assertThat(axedriver, isAxeClean().within(
new ElementSelector("#selector1"),
new ElementSelector("#selector2"),
new IFrameSelector("#frame", "selector3")));Regelauswahl
Die API bietet auch die Möglichkeit, zu modifizieren, welche Regeln bei einem Scan verwendet werden. Es gibt drei Möglichkeiten, dies zu tun. Diese sind: zusätzliche Regeln außerhalb des Standardregelsets für den Scan zu überprüfen, Regeln innerhalb des Standardregelsets für den Scan nicht zu überprüfen und nur die explizit angegebenen Regeln zu überprüfen.
Für eine vollständige Liste der gültigen Regel-Tags, die Sie mit diesen Methoden verwenden können, und was sie testen, lesen Sie die Dokumentation zu Regeln
Um zusätzliche Regeln zu überprüfen, verwenden Sie die checking-Methode. Um eine einzelne zusätzliche Regel zu testen, geben Sie einfach das Regel-Label in die checking-Methode ein
assertThat(axedriver, isAxeClean().checking("label"));Ähnlich wie bei den anderen Kettenmethoden können mehrere zusätzliche Regeln auf zwei Arten mit der checking-Methode überprüft werden:
assertThat(axedriver, isAxeClean().checking("label", "tabindex"));
assertThat(axedriver, isAxeClean().checking("label").checking("tabindex"));Die checking-Methode kann auch mit einer Regelauswahlmethode verkettet werden.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").checking("tabindex"));Es besteht auch die Möglichkeit, Regeln von einem Scan auszuschließen. Dies ist über die skipping-Methode möglich. Sie funktioniert identisch zur checking-Methode, außer dass sie Regeln ausschließt, anstatt sie hinzuzufügen.
assertThat(axedriver, isAxeClean().skipping("label"));Sie kann auch verwendet werden, um mehrere Regeln auszuschließen.
assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));
assertThat(axedriver, isAxeClean().skipping("label").skipping("tabindex));Schließlich kann sie auch mit einer Regelauswahlmethode verwendet werden.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").skipping("#label"));Die letzte Methode wird verwendet, wenn nur bestimmte Regeln gewünscht sind. Die checking only-Methode verändert den Scan so, dass nur diejenigen Regeln überprüft werden, die explizit an sie übergeben werden. Zusätzlich wird diese Methode nicht mit der Auswahlmethode für Barrierefreiheitsstandards verkettet. Um nur eine einzelne Regel zu überprüfen:
assertThat(axedriver, isAxeClean().checkingOnly("label"));Diese Methode kann auch verwendet werden, um mehrere Regeln auf zwei Arten zu überprüfen.
assertThat(axedriver, isAxeClean().checkingOnly("label", "tabindex"));
assertThat(axedriver, isAxeClean().checkingOnly("label").checkingOnly("tabindex"));Für eine vollständige Liste der gültigen Regel-Tags, die Sie mit diesen Methoden verwenden können, und was sie testen, lesen Sie die Dokumentation zu Regeln.
Verstöße ignorieren
Es ist möglich, den Scan so zu konfigurieren, dass bestimmte Fälle von Verstößen ignoriert werden. Um dies zu tun, wird die ignoring-Methode verwendet. Sie funktioniert, indem Sie die Selektoren der Elemente, die Sie ignorieren möchten, als Array übergeben, gekoppelt mit der Regel, die sie verletzen.
assertThat(axedriver, isAxeClean().ignoring("[\".sidebar\", \"#branded-content\"]", "color-contrast"));Nutzungsservice
Erhalten Sie Einblicke in die Nutzungstrends von Axe DevTools innerhalb Ihrer Organisation
Standardmäßig ist der Nutzungsdienst aktiviert und die Standard-URL ist https://usage.deque.com. Setzen Sie die Umgebungsvariable AXE_TRACK_USAGE auf false, um ihn zu deaktivieren. Wenn Ihre Nutzungsevents Deque nicht erreichen, setzen Sie die Umgebungsvariable AXE_METRICS_URL explizit.
Umgebungsvariablen
Diese Umgebungsvariablen ermöglichen es Ihnen, den Nutzungsservice zu konfigurieren und die Eigenschaften der gemeldeten Ereignisse zu ändern.
| Name | Typ | Kann überschrieben werden | Beschreibung |
|---|---|---|---|
AXE_DISTINCT_ID |
String | — | Ein UUID-Identifikator, der für den angemeldeten Benutzer gleich bleibt (außer er wird neu generiert). In Ruby heißt diese Variable DEQUE_DISTINCT_ID. |
AXE_INCLUDE_TEST_RESULTS |
Boolean | — | Setzen Sie true, um die vollständigen axe-core-Ergebnisse im testResults-Objekt jedes Ereignisses einzuschließen (Standard ist false). Wird nur von der CLI und den Node.js-APIs unterstützt. |
AXE_METRICS_URL |
String | — | Die URL des REST-Nutzungsendpunkts (Standard ist https://usage.deque.com) |
AXE_TRACK_USAGE |
Boolean | — | Setzen Sie false, um das Reporting des Nutzungsdienstes zu deaktivieren. Das Reporting ist standardmäßig aktiviert. |
AXE_APPLICATION |
String | false | Die Anwendung, die verwendet wurde, um Barrierefreiheitsfehler zu überprüfen |
AXE_DEV_INSTANCE |
Boolean | true | Zeigt an, ob dieses Ereignis durch die Aktionen eines Softwareentwicklers entstanden ist. Nützlich zum Markieren und späteren Entfernen von Ereignissen, die während der Entwicklung oder des Testens protokolliert wurden. |
AXE_DEPARTMENT |
String | true | Die Abteilung des Benutzers innerhalb der Organisation |
AXE_KEYCLOAK_ID |
String | false | Die Keycloak-ID des Benutzers |
AXE_LOGGED_IN |
Boolean | false | Zeichnet auf, ob der Benutzer im zu testenden Anwendung angemeldet ist |
AXE_ORGANIZATION |
String | true | Die Organisation des Benutzers. Um Ihre Nutzung in Axe Reports anzuzeigen, setzen Sie dies auf die ID Ihrer Organisation (kontaktieren Sie Deque, um diese zu erhalten). |
AXE_SESSION_ID |
String | false | Ein UUID, das die Sitzung des Benutzers identifiziert |
AXE_USER_ID |
String | false | Die Identität eines bestimmten Benutzers, wie eine E-Mail-Adresse, ein Name oder eine Login-ID. Axe Reports zählt anhand dieses Wertes eindeutige Benutzer. |
AXE_USER_JOB_ROLE |
String | false | Die Rolle des Benutzers im Beruf |
AXE_USER_STATUS |
String | false | Statusinformationen, die Sie mit dem Benutzer verknüpfen möchten |
Nächste Schritte
Für die weitere Nutzung Ihrer Axe DevTools-Scannergebnisse, wie z.B. Berichte, sehen Sie die Dokumentation zum Axe DevTools Java Selenium-Paket
Fehlerbehebung
Wenn Sie Probleme bei der Einrichtung Ihres Barrierefreiheitstests haben, kontaktieren Sie direkt Ihren Deque-Ansprechpartner, erreichen Sie uns über unseren Support-Desk oder senden Sie uns eine E-Mail. Wir helfen Ihnen gerne, Ihre Barrierefreiheitstestbemühungen in Gang zu bringen.
