Hamcrestテストを書く
Java用Axe DevTools for Webを使用したHamcrestマッチャーによるアクセシビリティテストの作成
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の担当者に直接連絡するか、当社のサポートデスクを通じて、またはメールを送信するでご連絡ください。皆様のアクセシビリティテスト活動の立ち上げをサポートできることを嬉しく思います。
