Selenium-Tests schreiben

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard

Barrierefreiheitstests mit Selenium WebDriver und Axe DevTools für Web in Java schreiben

Not for use with personal data

Verwenden Sie Axe DevTools Java Selenium

Diese Konfiguration von Axe DevTools bindet sich nicht von Haus aus an eine Assertionsbibliothek. Dies ermöglicht sowohl einfache Barrierefreiheitstests als auch vollständige Testanpassung und die Verwendung mit benutzerdefinierten Assertions.

Voraussetzungen

Um Axe DevTools Java Selenium nutzen und damit Ergebnisse erzielen zu können, müssen Sie bereits eine Testdatei mit Axe DevTools erstellt und Ihren gewünschten Selenium WebDriver importiert und initialisiert haben. Falls Sie diesen Schritt noch nicht abgeschlossen haben, lesen Sie zunächst diesem Leitfaden, um zu erfahren, wie das geht.

Einen Scan durchführen

Mit dieser Konfiguration erfordert ein grundlegender Barrierefreiheitsscan nur drei Codezeilen. Ersetzen Sie in Ihrer Testdatei <URL> durch die gewünschte Webadresse der zu testenden Seite. Die Scan-Ergebnisse werden in der results-Variable gespeichert

webdriver.get("<URL>");
Results results = axeSelenium.run(axedriver);
webdriver.quit();

Verwendung der Scan-Ergebnisse

Nachdem Sie den Scan durchgeführt haben, möchten Sie möglicherweise etwas mit den Ergebnissen machen. Die einfachste Option besteht darin, die Ergebnisse in der Konsole auszugeben.

System.out.print(results);

Sie können die Ergebnisse auch verwenden, um auf Barrierefreiheitsverletzungen zu prüfen. Der einfachste Weg, dies zu tun, ist mit einer Aussage wie dieser:

if (!results.violationFree()) { 
    //do something, like throw an exception
}

Weitere Informationen zur Nutzung des Ergebnisobjekts für benutzerdefinierte Tests finden Sie auf der Seite über die Ergebnisse verwenden.

Beispiel-Testdatei

Diese Testdatei arbeitet mit den gleichen Bausteinen, die in importieren und initialisieren behandelt werden, sowie mit dem Leitfaden zum Schreiben von Tests auf dieser Seite.

import com.deque.html.axedevtools.selenium.*;
import com.deque.html.axedevtools.selenium.results.*;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Example {
    public static void main(final String[] args) {
        AxeSelenium axeselenium = new AxeSelenium();
        WebDriver webdriver = new ChromeDriver();
        AxeDriver axedriver = new AxeDriver(wd);

        webdriver.get("<URL>");

        Results results = axeselenium.run(axedriver);

        webdriver.quit();

        if (!results.violationFree()) {
            int violationCount = results.getViolations().size();
            System.out.printf("Found %d violations!\n", violationCount);
            System.exit(1);
        }

        System.out.println("No violations found!");
    }
}

In diesem Beispiel werden Chrome und ChromeDriver verwendet. Diese können durch jeden anderen Selenium-Browsertreiber und Browser ersetzt werden. Falls diese Testdatei Barrierefreiheitsprobleme findet, gibt sie die Anzahl der gefundenen Verstöße aus und beendet sich mit dem Statuscode 1 (Fehler). Um diese Testdatei in Ihrer eigenen Umgebung zu verwenden, müssen Sie eine URL in die Zeile einfügen

webdriver.get("<URL>");

Zusätzliche Referenz

Zusätzlich zur oben beschriebenen grundlegenden Verwendung bietet Axe DevTools Java Selenium mehrere Verkettungsmethoden, um die Art und Weise, wie der Scan ausgeführt wird, zu modifizieren. Diese Methoden können den Umfang und das Regelset des Scans nach Belieben anpassen. Standardmäßig wird die gesamte Seite gescannt und auf Barrierefreiheitsverletzungen gemäß den WCAG 2.0 Level AA-Richtlinien überprüft. Ein wichtiger Hinweis ist, dass nachfolgende Aufrufe der run-Methode alle Vorzüge der unten genannten Verkettungsmethoden überschreiben. Änderungen am Umfang oder an den Regeln bleiben bei mehreren Scans mit diesen Methoden nicht bestehen.

Scoping

Standardmäßig wird die gesamte Seite gescannt. Axe DevTools unterstützt jedoch die Möglichkeit, bestimmte Teile einer Seite mit seinen Scoping-Verkettungsmethoden zu scannen. Diese Scoping-Methoden ändern effektiv die „Oberfläche“ der Seite, die gescannt werden soll, auf den gewünschten Zielbereich. Zusätzlich ist eine Methode zum Ignorieren von Verstößen verfügbar. Durch „Scoping“ der Seite mit dieser Methode wird der Bereich des Scans nicht reduziert, aber sie ignoriert Verstöße eines bestimmten Typs innerhalb des festgelegten Bereichs und scannt den Bereich dennoch auf andere potenzielle Verstöße. Alle diese Methoden arbeiten auf Basis von CSS-Selektorbereichen. Der Bereich jedes CSS-Selektors auf einer bestimmten Seite kann mithilfe des „Element inspizieren“-Widgets in den Entwicklertools Ihres Browsers bestimmt werden.

Scoping-Methoden

Wie oben erläutert, ändern diese Methoden effektiv die Oberfläche der zu scannenden Seite. Es gibt zwei Methoden in dieser Kategorie: eine „inklusive“ Methode und eine „exklusive“ Methode. Sie können miteinander verkettet werden, um mehrere Enklaven und Exklaven der Scanning-Oberfläche zu erstellen.

Scoping - Eingeschlossen

Die eingeschlossene Scoping-Verkettungsmethode ändert den Scan so, dass er nur innerhalb der von den übergebenen CSS-Selektor(en) angegebenen Bereich der Seite durchgeführt wird. Es gibt mehrere Möglichkeiten, die eingeschlossene Methode zu verwenden: Einzelscope, Mehrfachscope, Verbundscope und IFrame-Scoping.

Diese Methode kann mit einem einzelnen Selektor wie folgt verwendet werden:

axeselenium.including("#selector1").run(axedriver);

Dieser Scan wird nur innerhalb des Bereichs von Selektor 1 durchgeführt

Sie können einen Scan mit mehreren Scopes einrichten:

axeselenium.including("#selector1").including("#selector2").run(axedriver);

Dieser Aufruf scannt innerhalb des Bereichs von Selektor 1 und Selektor 2. Sie können entweder durch Kommas getrennt oder in einer separaten eingeschlossenen Klausel deklariert werden.

Verbundscoping kann mit der folgenden Syntax erreicht werden:

axeselenium.including("#selector1 .selector2").run(axedriver);

Dieses Verbundscoping führt dazu, dass nur Elemente mit Selektor 2 innerhalb von Selektor 1 gescannt werden. Dies wird erreicht, indem die Selektoren nicht durch Kommas getrennt werden.

Um innerhalb eines IFrames ein Scoping vorzunehmen, kann ein List<String> übergeben werden. Der innerhalb des IFrames zu scannende Umfang wird als zusätzlicher Parameter übergeben.

axeselenium.including(Arrays.asList(new String[] {"#frame1", "#selector1"})).run(axedriver);

Dieser Scan wird auf Elemente innerhalb von Selektor 1 ausgeführt, das sich innerhalb von Frame 1 befindet.

Das Scoping innerhalb mehrerer IFrames funktioniert genauso wie die normale Mehrfachauswahl. Rufen Sie einfach including erneut auf.

axeselenium.including(Arrays.asList(new String[] {"#frame1", "#selector1"}))
    .including(Arrays.asList(new String[] {"#frame2", "#selector2"})).run(axedriver);

Dieser Scan wird nur innerhalb von Selektor 1 innerhalb von Frame 1 und Selektor 2 innerhalb von Frame 2 durchgeführt.

Es ist auch möglich, innerhalb verschachtelter IFrames ein Scoping vorzunehmen:

axeselenium.including(Arrays.asList(new String[] {"#frame1", "#frame2", "#selector1"})).run(axedriver);

Dieser Scan wird innerhalb des Umfangs von Selektor 1 innerhalb von Frame 2 durchgeführt, der sich selbst innerhalb von Frame 1 befindet.

Scoping - Ausschließen

Zusätzlich zur eingeschlossenen Verkettungsmethode verfügt diese API über eine ausschließende Methode. Diese Methode ändert den Scan so, dass nur Elemente außerhalb des angegebenen Bereichs gescannt werden. Die Einrichtung und Nutzung ist identisch mit der eingeschlossenen Methode, daher beziehen Sie sich auf den obigen Abschnitt für weitere Details und Beispiele, wie sie verwendet werden kann. Ein wichtiger Punkt ist, dass die eingeschlossenen und ausschließenden Methoden miteinander verkettet werden können, um komplexe Scopes viel einfacher zu erstellen, als nur durch die Verwendung von Include oder Exclude.

Dieses Beispiel zeigt eine Möglichkeit, die innerhalb- und ausschließenden Methoden zu kombinieren:

axeselenium.including("#selector1").excluding("#selector2").run(axedriver);

Dieser Scan wird nur auf dem Teil der Seite durchgeführt, der sich innerhalb von Selektor 1 befindet, der nicht auch innerhalb von Selektor 2 liegt.

Scoping - Verstöße ignorieren

Die letzte mit Scoping verwandte Verkettungsmethode ist die Ergebnisse ignorieren-Methode. Diese Methode ändert den Gesamtumfang des Scans nicht, ignoriert jedoch Verstöße eines bestimmten Typs innerhalb eines bestimmten Umfangs. Sie funktioniert, indem die Selektoren der Elemente, die Sie ignorieren möchten, als Array übergeben werden, zusammen mit der Regel, die sie verletzen.

axeselenium.ignoring("[\".sidebar\", \"#branded-content\"]", "color-contrast").run(axedriver);

Dieser Scan ignoriert Farbkontrast-Verstöße innerhalb des Seitenleistenabschnitts und des gebrandeten Inhaltsabschnitts.

Regeln

Es gibt drei Möglichkeiten, Ihre Regelkonfiguration für jeden Scan zu ändern. Diese unterschiedlichen Methoden ermöglichen unterschiedliche Granularität bei der Auswahl von zu testenden Regeln. Die am wenigsten granulare Regelset-Methode wählt ein Regelset oder eine größere Gruppe von Regeln basierend auf den üblichen Barrierefreiheitsstandards aus. Die etwas granularere Regelset-Standards-Methode, auch bekannt als Tags, wählt Regeln basierend auf den Bereichen eines größeren Barrierefreiheitsstandards aus, in den sie fallen. Schließlich gibt es drei Optionen für die Konfiguration mit einer Regel auf einmal. Alle zusammen ermöglichen diese Verkettungsmethoden, Ihren Scan genau auf die von Ihnen gewünschten Regeln einzustellen.

Für Informationen zu axe-core-Regeln, besuchen Sie die Regelsatz-Übersichtsseite.

Regelsatz-Auswahl

Diese Methode wählt Regeln nach ihrer am meisten aggregierten Zuordnung aus – einem Regelset. Ein Regelset ist eine Sammlung aller Regeln, die einem branchenweiten Barrierefreiheitsstandard entsprechen. Regelsets für WCAG 2.0, 2.1 und 2.2; ADA Section 508; Trusted Tester v5; EN 301 549; und RGAA. Zusätzlich können Best-Practice-Regeln mit einem booleschen Schalter aktiviert werden.

Regelsets bestehen oft aus mehreren Tags, die nach spezifischeren Unterscheidungen gruppierte Regeln darstellen. Zum Beispiel enthält das wcag2-Regelset alle Regeln, die mit wcag2a WCAG 2.0 Niveau A, wcag2aa WCAG 2.0 Niveau AA und wcag2aaa WCAG 2.0 Niveau AAA markiert sind.

Verwenden Sie diese Option, wenn Sie ein Regelset unverändert auswählen möchten.

axeselenium.forRuleset("wcag2.1").run(axedriver);

Dieser Scan wird nur mit WCAG 2.1-Regeln ausgeführt.

Um Best-Practice-Regeln zu aktivieren, verwenden Sie die zweite Form von forRuleset.

axeselenium.forRuleset("wcag2.1", true).run(axedriver);

Standardauswahl

Die Methode der Barrierefreiheitsstandard- oder Tag-Kette ermöglicht eine etwas größere Granularität innerhalb der Regelsets von axe-core. Für WCAG-basierte Regeln können Sie mit dieser Methode nur die Regeln auswählen, die mit Einzel-A oder Doppel-A markiert sind. Diese Liste zeigt die verfügbaren Tagnamen und ihre entsprechenden Standards auf.

Diese Option ist besonders nützlich, wenn nur ein bestimmter Teil eines Regelsets getestet werden soll, beispielsweise nur die Einzel-A-Regeln unter WCAG 2.0.

Tag-Name Barrierefreiheitsstandard
wcag2a WCAG 2.0 Niveau A
wcag2aa WCAG 2.0 Niveau AA
wcag2aaa WCAG 2.0 Niveau AAA
wcag21a WCAG 2.1 Niveau A
wcag21aa WCAG 2.1 Niveau AA
wcag21aaa WCAG 2.0 Niveau AAA
wcag22a WCAG 2.2 Niveau A
wcag22aa WCAG 2.2 Niveau AA
wcag22aaa WCAG 2.2 Niveau 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

Obwohl nicht explizit als Teil eines Barrierefreiheitsstandards definiert, bieten wir eine Reihe von Regeln an, die wir als „Best Practices“ bezeichnen. Auch wenn sie nicht zwingend erforderlich sind, wird das Testen mit diesen Regeln helfen, Ihre Website so fair wie möglich nutzbar zu machen.

Ein einzelner Standard kann wie folgt ausgewählt werden:

axeselenium.accordingTo("wcag2a").run(axedriver);

Dieser Scan wird nur mit Regeln ausgeführt, die unter WCAG 2.0 Niveau A markiert sind.

Zusätzlich können mehrere Tags angegeben werden, um mehrere Barrierefreiheitsstandards auszuwählen:

axeselenium.accordingTo("wcag2a", "section508").run(axedriver);

Diese Scans werden sowohl die Regeln ausführen, die unter WCAG 2.0 Niveau A als auch ADA Section 508 markiert sind.

Regelauswahl

Schließlich können Sie Ihr Regelset durch einzelne Regeln verändern. Für Informationen über die Namen aller axe-core-Regeln und was jede Regel testet, siehe die axe-core Regelbeschreibungsdokumentation.

Diese Methoden eignen sich gut, wenn sich Ihre gewünschte Endgruppe von Regeln nur um einige individuelle Regeln von einem bestehenden Regelset oder Standard/Tag unterscheidet. Um ein vollständig benutzerdefiniertes Regelset zu erstellen, schauen Sie sich unsere Optionen für benutzerdefinierte Regeln an.

Zusätzliche Regeln überprüfen

Die Prüfkettenmethode ermöglicht es Ihnen, zusätzliche Regeln zum Testen hinzuzufügen, zusätzlich zu Ihrem Standardregelset.

Diese Methode kann verwendet werden, um eine einzelne zusätzliche Regel zu überprüfen:

axeselenium.checking("label").run(axedriver);

wo der Scan mit dem Standard-Regelsatz zusammen mit der Regel „label“ durchgeführt wird.

Es kann auch verwendet werden, um mehrere zusätzliche Regeln auf zwei verschiedene Arten zu überprüfen:

axeselenium.checking("label", "tabindex").run(axedriver);
axeselenium.checking("label").checking("tabindex").run(axedriver);

wo der Scan mit dem Standard-Regelsatz zusammen mit den Regeln „label“ und „tabindex“ durchgeführt wird.

Es kann auch verwendet werden, um eine oder mehrere Regeln zu einem bestimmten Tag hinzuzufügen:

axeselenium.accordingTo("wcag2a").checking("tabindex").run(axedriver);

wo der Scan anhand der WCAG 2.0 Level A-Regeln durchgeführt wird, mit der zusätzlichen Regel „tabindex“.

Regeln überspringen

Ähnlich wie bei der Prüfmethodik ändert die Übersprungsmethode die Standardregeln, die durch die angegebene(n) Regel(n) verwendet werden. Anstatt sie jedoch zum Regelsatz hinzuzufügen, entfernt die Übersprungsmethode die angegebene(n) Regel(n) aus denen, die zum Testen der Seite verwendet werden. Die Einrichtung und Nutzung ist identisch mit der Prüfmethodik, daher beziehen Sie sich auf den obigen Abschnitt für weitere Details und Beispiele zur Nutzung. Ein wichtiger Punkt, den man sich merken sollte, ist, dass die Prüf- und Übersprungsmethoden miteinander kombiniert werden können, um benutzerdefinierte Regelsätze viel einfacher zu erstellen, als wenn man nur die Ignorier- oder Prüfmethode alleine verwendet.

axeselenium.accordingTo("wcag2a").checking("tabindex").skipping("label").run(axedriver);

Dieses Beispiel zeigt einen Scan, der anhand der WCAG 2.0 Level A-Regeln durchgeführt wird, mit der zusätzlichen Regel „tabindex“ und der Entfernung der Regel „label“.

Nur Prüfung

Die Nur-Prüfungsmethode überprüft nur die angegebene(n) Regel(n). Jede Regel, die nicht explizit angegeben wird, wird im Scan nicht berücksichtigt.

Diese Kettenmethode kann verwendet werden, um eine einzelne Regel anzugeben:

axeselenium.checkingOnly("tabindex").run(axedriver);

wo der Scan nur mit der Regel „tabindex“ durchgeführt wird.

Es kann auch verwendet werden, um mehr als eine Regel auf diese zwei Arten anzugeben:

axeselenium.checkingOnly("label", "tabindex").run(axedriver);
axeselenium.checkingOnly("label").checkingOnly("tabindex").run(axedriver);

wo der Scan nur mit den Regeln „label“ und „tabindex“ durchgeführt wird.

Deaktivierung iframe Prüfungen

Auf instabilen Seiten können Iframes Probleme verursachen. Axe muss in jeden Frame injiziert und in jedem Frame gleich konfiguriert werden. Wenn Iframes hinzugefügt oder entfernt werden, während AxeSelenium::run Ihre Seite prüft, können Ausnahmen ausgelöst oder unerwartetes Verhalten auftreten. Als Sicherheitsmaßnahme bietet AxeSelenium eine Methode, um alle Iframe-Interaktionen zu deaktivieren, AxeSelenium::disableIframeTesting. Wenn aktiviert, wird axe-core nicht in Iframes der Seite injiziert, noch wird es in besagten Iframes ausgeführt. Nur die oberste Seite wird überprüft.

Es kann folgendermaßen verwendet werden:

axeselenium.disableIframeTesting().run(axedriver);
note

Die Verwendung dieser Methode wird nicht empfohlen. Es ist immer besser zu warten, bis Ihre Seite stabil wird, bevor Sie sie an AxeSelenium::run übergeben.

Nutzungsdienst

Erhalten Sie Einblicke in die Nutzungstrends von Axe DevTools in Ihrem Unternehmen

Der Nutzungsdienst kann über Umgebungsvariablen oder Methoden zur Laufzeit konfiguriert werden. Wenn beides verwendet wird, werden die Werte der Methoden verwendet. Hinweis: Nicht alle Datenfelder des Nutzungsdienstes können über Methoden festgelegt werden.

Standardmäßig ist der Nutzungsdienst aktiviert und die Ergebnisse werden an https://usage.deque.com gesendet. Setzen Sie die AXE_TRACK_USAGE-Umgebungsvariable auf false, um ihn zu deaktivieren. Wenn Ihre Nutzungsereignisse Deque nicht erreichen, setzen Sie die AXE_METRICS_URL-Umgebungsvariable explizit.

Umgebungsvariablen

Diese Umgebungsvariablen ermöglichen es Ihnen, den Nutzungsdienst 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

Verfolgung aktivieren

Diese Methode ermöglicht es Benutzern, die Datenübermittlung an den Nutzungsdienst zu aktivieren oder zu deaktivieren. Das Senden ist standardmäßig aktiviert.

.enableTracking(boolean state)

Tracking-URL festlegen

Diese Methode erlaubt es Benutzern zu ändern, wohin die Nutzungsmetriken gesendet werden. Standardmäßig zu https://usage.deque.com

.setTrackingUrl(String url)

Eindeutige ID festlegen

Diese Methode erlaubt es Benutzern, die gespeicherte/verwendete eindeutige ID zu ändern

.setDistinctId(String distinctId)

Nächste Schritte

Sobald Sie Tests mit Axe DevTools schreiben, lesen Sie mehr über Ergebnisse verwenden, um detailliertere benutzerdefinierte Tests zu schreiben, oder lesen Sie über den Berichterstatter verwenden, um Berichte über die Barrierefreiheits-Scans zu erstellen.

Fehlerbehebung

Wenn Sie Probleme bei der Einrichtung Ihrer Zugänglichkeitstests haben, kontaktieren Sie Ihren Deque-Vertreter direkt, erreichen Sie uns über unser Support Desk oder senden Sie uns eine E-Mail. Wir helfen Ihnen gerne, Ihre Barrierefreiheits-Testbemühungen in Gang zu bringen.