ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
アプリのアクセシビリティ監査の実施
アプリのアクセシビリティを、ビルド毎にテストする方法を紹介します。XCTestを使ってアクセシビリティの自動監査を行う方法や、その結果の解釈方法について説明します。UIテストのカバー範囲を改善するのに役立つ、アクセシビリティAPIの強化についても共有します。
関連する章
- 0:40 - Discover accessibility audits
- 2:52 - Add audits to your UI tests
- 9:34 - Filter audit issues
- 11:41 - Considerations when running audits
- 12:59 - Expose elements hidden from accessibility to UI tests
リソース
関連ビデオ
WWDC18
-
ダウンロード
♪ ♪
こんにちは Bhavyaです Accessibilityチームのエンジニアです 本日のセッションで焦点を当てるのは みなさんのアプリにおける アクセシビリティ監査の実行方法です まず UIテストにおける 自動アクセシビリティ監査の実行が いかに簡単であるかを見ていきます その次は 素晴らしいテスト体験を 実現すると同時に 素晴らしいアクセシビリティ体験を 提供するために どのように要素を公開するか説明します では アクセシビリティ監査から 始めていきましょう アプリの開発プロセスにおいて テストは必要不可欠です テストを書くことで コード送信の前に バグを発見し修正できます そのような方法でプロダクトの品質が 保たれています アクセス可能なプロダクトは 品質の高いプロダクトです 世界中のおよそ7人に1人が 何らかの障がいを抱えていて 世の中やデバイスとのインタラクションが 障がいによって妨げられています VoiceOverのようなツールを使って アプリとのインタラクションを 最善の状態にしています 高品質プロダクトを届けるというのは 誰もがアクセス可能なアプリを届け 誰でも最高レベルのアプリ体験が できるようにすることです 私自身の体験からも アクセシビリティは非常に深く 複雑なテーマだと認識しています いかにアクセシビリティ監査が これを簡単にしてくれるか見てみましょう XcodeにはAccessibility Inspector というツールがあります このツールはアプリ内の アクセシビリティ上の問題を 簡単に発見・診断し 修正してくれます このツールをパワフルに 利用できる方法の一つが アプリにおける監査の実行です Inspectorはアプリ内の 個々のビューにある 一般的なアクセシビリティ問題が 監査できます
これは私のサンプルアプリで タブが2つあります 最初のタブには 心に響く引用句が表示されて 二つ目には内省のために 自分の考えが書き込めます 引用句のタブはテキストビューで 引用句を表示しています このテキストビューは 背景画像の上に置かれています 「New Quote」ボタンもあり このボタンで引用句を更新します Accessibility Inspectorを起動して アプリの監査を実行できます Inspectorはあらゆる種類の 問題をチェックします 例えば 要素の説明が十分であるか 適切なコントラストがあるかなどです 発見された問題は表に表示され それぞれに詳細な説明がついています アクセシビリティ監査はパワフルで しかも自動化できるようになりました みなさんもUIテストで 監査が実行できるのです XCUIApplicationに perform AccessibilityAuditを呼び出せば 現在のビューのアクセシビリティ問題を Inspectorと同じように監査します アサーションは不要で 問題が発見された場合は テストは自動でfailになります 簡単なデモで具体的に見てみましょう
Xcodeでデモアプリを開きました Swiftで書かれていて 標準のUIKitビューを使っています 既にいくつか合格したテストを 用意していますが これらは画面上に要素が存在するか 検証するものです 例えば testQuoteTabViewが 検証するのは 引用句のタブに画像ビューと テキストビューが存在するかどうかです 強調したいのは これらのテストが アクセシビリティの検証にもなることです XCTestがこれらのビューを発見できるのは アクセシビリティ要素だからです つまり UIテストが要素を発見できるなら Appleの補助技術でも 発見できるということです この方法でもアクセシビリティのテストが 少しできるのは良いことですが テストに監査を追加して どんな問題でもすべて 確実に見つけられるように したいと思います testAccessibilityQuoteTabViewという もう1つのテストを作成します アプリの起動を設定して Quoteタブをナビゲートしていきます
そして最後にアプリに呼び出すのが performAccessibilityAuditです
監査は複数の問題を報告してくれるので 最初のfailureのあとでも テストが残りの問題も報告してくれるよう continueAfterFailureを trueに設定します
できました テストの菱形をクリックして テストを実行しましょう
テストはfailだったようです 問題はXcode source editor内に 埋め込みで報告されています 監査で2つの問題が発見されました 要素に説明がないことと ラベルが人間には読めないことです 問題の要素が何なのか 見つけ出しましょう この2つの問題を掘り下げるには Report navigatorに行って Testsをクリックし テストの隣にある開示の 三角マークをクリックします このビューはテストランと問題の 詳細な内容を表示します 最初の問題は「要素に説明がない」 だったので 要素のスクリーンショットを ダブルクリックすると 画像ビューに説明がないことが分かります 2つ目の問題も同様にできます テキストビューのラベルが 人間に読めないことが分かります 監査で見つかった問題を どう対処するのか考えましょう 個々の問題を探究して それを修正するのは重要なことで さもなければ補助技術に頼る アプリのユーザーにとって インタラクションやナビゲーションの 深刻な問題に発展していまします 中には 見つかった問題を ふるい分けしたうえで 無視すべき場合もあるということを 知るのは重要です おそらく問題は誤検出だったり 想定していた結果なのでしょう アクセシビリティ監査では このような問題を 簡単に無視できるようになります 問題の無視についての例は 後半で触れていきます アクセシビリティのベストプラクティスに ついての詳細は 2018年のトーク 「Deliver an Exceptional Accessibility Experience」をどうぞ では 監査で見つかった 最初の問題を見ていきましょう テキストビューのアクセシビリティラベルが 人間に読めないことです Storyboardのテキストビューを 調べてみると 設定されたアクセシビリティラベルは QUOTE_TEXTVIEWになっています VoiceOverなどの補助技術に 頼るユーザーは 最初にこのアクセシビリティラベルを聞き 次にアクセシビリティ値を聞きますが このようになります VoiceOver:QUOTE_TEXTVIEW 「1日ずつ生きて 1日ごとを 最高傑作の人生にする」 これはあまり良いラベルとは 言えませんし 本来なら VoiceOverはラベルをスキップして 引用句のみを話すべきです アクセシビリティラベルを削除できますが その場合UIテストが崩壊します なぜならテストはこのラベルで テキストビューを識別するからです できればこの文字列はアクセシビリティ 識別子として設定されるべきです アクセシビリティ識別子を使えば UIテストの作成時に アクセシビリティやUI体験に影響せずに 要素を一意的に識別できます Storyboardに行ってみましょう
テキストビューを選択し ラベルからこの文字列をカットし 識別子にペーストします
監査で見つかったもう一つの問題は 画像に説明がないことでした 典型的には 画像は 簡潔かつ説明的なラベルによって アクセス可能であるのは重要です ですが私のアプリでは これは装飾的な背景画像です 主要なコンテンツの一部ではなく 引用句に何の意味も付加しません できればVoiceOverのような技術は この画像ビューをスキップすべきです ビューコントローラのビューで アクセシビリティ要素を上書きして スキップさせることにします 引用句のテキストビューと 「New Quote」ボタンのみに設定すれば VoiceOverは画像ビューには 触れないようになります Xcodeに行ってやってみましょう ビューコントローラファイルに行って accessibilityElementsを設定します
良いですね それでは監査に戻って テストケースを実行し 問題が解決したか見てみましょう
できました 監査は合格です UIテストの一つが failになっているようですが それについては後ほど触れます アクセシビリティ監査を追加すると ふるい分けすべき問題に 遭遇することがあるかもしれません 例を挙げると 私の監査が見つけた問題に 特定のラベルのコントラストが 低すぎると出ていました 調べてみたところ コントラストには何も問題がなく 問題は誤検出だったようです では この問題を無視する方法を 見ていきましょう performAccessibilityAudit関数は 追加のパラメータを取り込みます 最初のパラメータで 私が実行したい監査カテゴリの オプションセットが特定できます これらのカテゴリはダイナミックタイプや コントラストなどで Accessibility Inspectorで 既に馴染みのある 同様のカテゴリです この例ではダイナミックタイプと コントラストに関する問題のみ 監査の対象に選びました 2番目のパラメータでは クロージャの特定ができます このクロージャは監査で見つかった すべての問題に呼び出され どの問題を無視するか または 報告するかを選ばせてくれます まずは shouldIgnoreと呼ばれる値を falseに定義します デフォルトとしては 問題は 無視されるべきではありません 要素のコントラストの問題を 「My Label」ラベルで 無視したいとしましょう
issue.elementを使って 問題に関連した XCUIElementが取得できます この要素のラベルは「My Label」で 問題のタイプはコントラストで 対象の問題だと確認できたため shouldIgnoreをtrueに設定します trueに設定したということは この問題を無視したいということです 最後にまた shouldIgnoreについて お話しします 上の条件が満たされなければ shouldIgnoreはfalseとなり 問題はfailureとして 報告されるべきだということになります 以上です この例を他にも当てはめて 無視の基準をカスタム化するのも 要素タイプや識別子など ほかのプロパティを使って行えます 自分のアプリへのアクセシビリティ監査を 書き始めるにあたり 覚えておくと便利なことは以下の通りです 監査ができるのは 画面上の要素だけです つまり 完全に網羅したいなら アプリが表示するであろう すべての異なるビューに アクセシビリティ監査テストを 追加するべきです 私のサンプルアプリの場合 もう1つのテストを追加して 2番目のタブをナビゲートし 監査を行うべきです 複数テストのために 即時に監査を追加する簡単な方法は teardownで監査に上書き実行することです 変数はクラスのスコープ内で定義できます それにより テストはこれらの 変数を上書きして 監査にオプトインしたり オプトアウトしたりでき 問題を無視するための クロージャをカスタマイズできます テスト計画はプロジェクト内の 監査専用テストのグループ分けに便利です テスト計画では テストのターゲットやケース 個別のメソッドを選択的に 有効化することができます 最後に 監査は補助技術の 本当のテストに代わるものではありません 結局は VoiceOverや Dynamic Typeのようなテクノロジーを オンにしてアプリをテストするのが 高品質な体験を確保する最善法です 優れたアクセシビリティと 優れたテストはどちらも 相互に妥協することなく達成できます 自動化の要素では 自動化の目的に特化して 要素を公開することで 要素のアクセシビリティに 影響を与えずに済みます 今ではUIKitで このAPIを利用して 自動化が必要な要素のみを 公開することができますし 同時にこれらの要素の アクセシビリティを カスタマイズすることもできます 先ほどの例では 監査の問題を修正した際に UIテストの1つが壊れました 画像ビューはもう無くなっているようです それがUIテストから消えたのは アクセシビリティからも 消えているからです この画像ビューは 装飾的なものであったため アクセシビリティ要素に上書きして アクセシビリティから排除しました しかしそれにより UIテストからも 排除したことになったわけです 自動化要素がどのように 画像ビューをUIテストに 公開しやすくするかを見ましょう Xcodeでビューコントローラ ファイルに行きます
そしてビューコントローラビューの automationElementsを imageViewに設定します automationElementsに上書きする時は 自動化に公開する必要のある すべての要素の特定が 必要だということを忘れずに
つまり TextViewとButtonも リストに追加しなければなりません 自動化要素を上書きすると 既に自動化に公開されている 既存の要素を 上書きしていることになります テストケースを実行して 再び渡しているかどうか見てみましょう
良いですね 素晴らしいUIとアクセシビリティの テストを書いて アクセシビリティの問題も修正できました アクセシビリティ監査はアプリに 簡単で自動化された アクセシビリティテストを追加できる 素晴らしい方法です 監査により発見された問題を修正することで 誰もがみなさんのアプリを 確実に楽しめるようになります 素晴らしいアクセシビリティと 自動化の体験の両方を どちらも損なうことなく作成しましょう 自動化要素で アクセシビリティ体験に影響せず UIテストの目的に特化して 要素が公開できます みなさんも是非 UIテストに行って performAccessibilityAuditを 素早く追加してみてください ご視聴ありがとうございました
-
-
2:52 - Add an accessibility audit to a UI test
func testAccessibility() throws { let app = XCUIApplication() app.launch() try app.performAccessibilityAudit() }
-
8:40 - Customize elements available to assistive technologies
view.accessibilityElements = [quoteTextView, newQuoteButton]
-
9:57 - Filter specific issues from accessibility audits
try app.performAccessibilityAudit(for: [.dynamicType, .contrast]) { issue in var shouldIgnore = false // ignore contrast issue on "My Label" if let element = issue.element, element.label == "My Label", issue.auditType == .contrast { shouldIgnore = true } return shouldIgnore }
-
14:07 - Customize automation elements available to UI tests
view.automationElements = [imageView, quoteTextView, newQuoteButton]
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。