Hamcrestテストを書く

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

Java用Axe DevTools for Webを使用したHamcrestマッチャーによるアクセシビリティテストの作成

Not for use with personal data

Axe DevToolsでのHamcrestマッチャーの使用

前提条件

アクセシビリティテストを書いて結果を得るためには、Axe DevToolsでテストファイルをすでに作成し、選択したSelenium WebDriverを事前にインポートおよび初期化しておく必要があります。まだこの準備ができていない場合は、このガイドを読んで手順を確認してください。

Selenium WebDriverを使用して、hamcrestを通じたアクセシビリティテスト用の一連のマッチャーが提供されています。これらのマッチャーは、単体テストフレームワークやカスタムのキュウカンバーステップで使用することができます。

スキャン方法の選択

インポート文に見られるように、2つのアクセシビリティスキャン方法があります。最初のisAxeCleanは、違反が見つかった場合に例外をスローし、テストを停止します。2番目のisAuditedForAccessibilityは、スキャンされたページのアクセシビリティレベルに関係なく、テストを停止したり例外をスローしたりしません。

テストの記述

残りの例では、簡潔さのためにisAxeCleanメソッドが示されていますが、両方の方法が互換的に機能します。WebDriverとAxeDriverオブジェクトがインスタンス化および初期化されている場合、スキャンの作成はテストメソッドに次の2行のコードを追加するだけで簡単にできます。$URLをスキャンしたいページの希望するURLに置き換えてください。

webDriver.get("$URL");
assertThat(axedriver, isAxeClean());

複数のページをテストする場合、ドライバーの新しいインスタンスを作成する必要はなく、get、scanプロセスを繰り返すことができます。ページの異なる状態をスキャンするためには、webdriver APIを使用してページを操作し、再スキャンを実行します。

追加の参考文献

ページのスキャン方法を変更するためのいくつかのチェーンメソッドが利用できます。これらのメソッドには、除外/含有条項や、アクセシビリティ標準、アクセシビリティルール、アクセシビリティルールセットのスコープおよび修正が含まれます。簡潔さのために、すべてのチェーンメソッドはisAxeClean()と組み合わせられていますが、isAuditedForAccessibility()と互換的に機能します。

アクセシビリティ標準

Dequeは、チェーンメソッドaccording toを提供し、スキャンで使用されるアクセシビリティテスト標準を直接指定できます。

タグ名 アクセシビリティ標準
wcag2a WCAG 2.0 レベルA
wcag2aa WCAG 2.0 レベルAA
wcag2aaa WCAG 2.0 レベルAAA
wcag21a WCAG 2.1 レベルA
wcag21aa WCAG 2.1 レベルAA
wcag21aaa WCAG 2.0 レベルAAA
wcag22a WCAG 2.2 レベルA
wcag22aa WCAG 2.2 レベルAA
wcag22aaa WCAG 2.2 レベルAAA
section508 セクション508
EN-301-549 EN 301 549
RGAAv4 RGAAバージョン4
TTv5 信頼できるテスター v5
ベストプラクティス Dequeによって推奨されるベストプラクティス

どの標準が自身に適しているか不明な場合は、どのルールがどの標準に関連しているかについてaxe-coreのドキュメントを読むか、Deque代表者またはヘルプデスクを介してお問い合わせください。各標準に適用されるルールの完全なリストについては、ルールの説明のこのページを参照してください。

単一の標準を使用するには、単にaccording toチェーンメソッドを追加し、目的の標準を渡します

assertThat(axedriver, isAxeClean().accordingTo("wcag2a"));

1つのテスト標準を使用することに加えて、2つ以上のテスト標準に対してスキャンする方法が2つあります。どちらも同じように機能します。

assertThat(axedriver, isAxeClean().accordingTo("wcag2a", "section508"));
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").accordingTo("section508"));

スコープ

Dequeは、スコープ設定のスキャンを支援するために、2つの連鎖メソッドを提供しています。within() メソッドは、スキャンを渡されたセレクターの範囲内のみスキャンするように変更します。excluding() メソッドはその逆に動作します。セレクター内のコンテンツを無視するようにスキャンを変更します。以下の例はすべて within() メソッドを示していますが、excluding() メソッドも同様に機能します。

もっとも簡単には、アサーションが1つのセレクターで変更されます

assertThat(axedriver, isAxeClean().within("#selector1")); 

複合セレクターも可能です。以下の例では、セレクター1内のセレクター2を持つ要素のみがスキャンされます

assertThat(axedriver, isAxeClean().within("#selector1 .selector2"));

複数のスコープをテストするために、複数の選択を行う方法は3つあります。これらの例では、セレクター1 および セレクター2内の要素が対象です。

assertThat(axedriver, isAxeClean().within("#selector1, .selector2"));
assertThat(axedriver, isAxeClean().within("#selector1", ".selector2"));
assertThat(axedriver, isAxeClean().within("#selector1").within(".selector2"));

IFrame内をスコープ設定するには、IFrameセレクターを宣言する必要があります。IFrame内でスキャンするスコープは追加のパラメーターとして渡されます。

assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "#selector1")));

複数のIFrame内でのスコープ設定は、標準の複数選択と同じ方法で動作します。単にコンマで区切られた2つ以上のIFrameセレクターを作成します。

assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "selector1"), 
        new IFrameSelector("#frame2", "#selector2")));

入れ子になったIFrame内でスコープ設定することも可能です。この例は、2つ目のIFrame内にあるIFrameのセレクター1内でスキャンするスコープ設定を示しています。

assertThat(axedriver, isAxeClean().within(
    new IFrameSelector("#frame1",
    new IFrameSelector("#frame2", "#selector1"))));

最後に、ページ内およびIFrame内で複数のスコープを設定することが可能です。これを実現するには、要素セレクターオブジェクトが必要です。

assertThat(axedriver, isAxeClean().within(
    new ElementSelector("#selector1"),
    new ElementSelector("#selector2"),
    new IFrameSelector("#frame", "selector3")));

ルール選択

APIはスキャンで使用するルールを変更する機能も提供しています。これを行う方法は3つあり、スキャンの標準ルールセット外の追加ルールをチェックする、スキャンの標準ルールセット内のルールをチェックしない、明示的に指定されたルールのみをチェックする、があります。

これらのメソッドで使用可能な有効なルールタグと、それらが何をテストするかの完全なリストについては、ルールに関するドキュメントを参照してください。

追加のルールをチェックするには、checkingメソッドを使用します。単一の追加ルールをテストする場合は、ルールラベルをcheckingメソッドに渡すだけです

assertThat(axedriver, isAxeClean().checking("label"));

他のチェーンメソッドと同様に、複数の追加ルールはcheckingメソッドで2つの方法でチェックできます:

assertThat(axedriver, isAxeClean().checking("label", "tabindex"));
assertThat(axedriver, isAxeClean().checking("label").checking("tabindex"));

checkingメソッドは、ルール選択メソッドと組み合わせることもできます。

assertThat(axedriver, isAxeClean().accordingTo("wcag2a").checking("tabindex"));

スキャンからルールを無視するオプションもあります。これは、skippingメソッドを使って実現可能です。このメソッドは、checkingメソッドと同様に動作しますが、ルールを追加するのではなく除外します。

assertThat(axedriver, isAxeClean().skipping("label"));

複数のルールを省略するためにも使用できます。

assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));
assertThat(axedriver, isAxeClean().skipping("label").skipping("tabindex));

最後に、ルール選択メソッドと組み合わせて使用することもできます。

assertThat(axedriver, isAxeClean().accordingTo("wcag2a").skipping("#label"));

最後のメソッドは、特定のルールのみが必要な場合に使用されます。checking onlyメソッドは、スキャンを修正して明示的に渡されたルールのみをチェックします。また、このメソッドはアクセシビリティ標準選択メソッドとは連鎖しません。単一のルールのみをチェックするには:

assertThat(axedriver, isAxeClean().checkingOnly("label"));

このメソッドはまた、2つの方法で複数のルールをチェックするために使用できます。

assertThat(axedriver, isAxeClean().checkingOnly("label", "tabindex"));
assertThat(axedriver, isAxeClean().checkingOnly("label").checkingOnly("tabindex"));

このメソッドで使用可能な有効なルールタグと、それらが何をテストするかの完全なリストについては、ルールに関するドキュメントを参照してください。

違反の無視

特定の違反箇所を無視するようにスキャンを設定することが可能です。これを行うには、ignoringメソッドを使用します。このメソッドは、無視したい要素のセレクターを配列として渡し、それらが違反しているルールと組み合わせます。

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

利用サービス

組織内のAxe DevToolsの利用トレンドに関する洞察を得る

デフォルトでは、usage-serviceは無効化されており、デフォルトのURLはhttps://usage.deque.comです。

環境変数

これらの環境変数を使用して、使用サービスを設定し、報告されるイベントのプロパティを変更することができます。

名前 タイプ 上書き可能 説明
AXE_DISTINCT_ID 文字列 ログイン中のユーザーに対して同一であるUUID識別子(再生成されない限り)
AXE_METRICS_URL 文字列 REST使用エンドポイントのURL
AXE_TRACK_USAGE ブール値 使用サービスのレポートを有効にします(デフォルトはfalseです)
AXE_APPLICATION 文字列 false アクセシビリティエラーのチェックに使用されたアプリケーション
AXE_DEV_INSTANCE ブール値 true このイベントがソフトウェア開発者の行動によるものかを示します。開発またはテスト中に記録されたイベントをマークし、後で削除するのに便利です。
AXE_DEPARTMENT 文字列 true 組織内でのユーザーの部署
AXE_KEYCLOAK_ID 文字列 false ユーザーのKeycloak ID
AXE_LOGGED_IN ブール値 false テスト対象アプリケーションにユーザーがログインしているかどうかを記録します
AXE_ORGANIZATION 文字列 true ユーザーの組織
AXE_SESSION_ID 文字列 false ユーザーのセッションを識別するUUID
AXE_USER_ID 文字列 false 特定のユーザーの名前やログインIDなどのアイデンティティ
AXE_USER_JOB_ROLE 文字列 false ユーザーの役割
AXE_USER_STATUS 文字列 false ユーザーに紐づけたいステータス情報

次のステップ

Axe DevToolsのスキャン結果を今後の利用、例えばレポート作成を行うには、Axe DevTools Java Seleniumパッケージのドキュメントを参照してください

トラブルシューティング

アクセシビリティテストのセットアップに問題がある場合は、Dequeの担当者に直接連絡するか、当社のサポートデスクを通じて、またはメールを送信するでご連絡ください。皆様のアクセシビリティテスト活動の立ち上げをサポートできることを嬉しく思います。