ユーザー補助機能をテストすることで、ユーザー補助が必要なユーザーを含めた、すべてのユーザーの立場でアプリを体験できます。このようなテストを行うことで、有用で使いやすいアプリにするためのヒントが得られます。
このページでは、既存の Espresso テストにユーザー補助機能チェックを追加する方法について説明します。ユーザー補助機能の詳細については、ユーザー補助機能 のガイドをご覧ください。
チェックを有効にする
次のように AccessibilityChecks クラスを使用して、ユーザー補助機能テストを有効化し、設定できます。
Kotlin
import androidx.test.espresso.accessibility.AccessibilityChecks
@RunWith(AndroidJUnit4::class)
@LargeTest
class MyWelcomeWorkflowIntegrationTest {
init {
AccessibilityChecks.enable()
}
}
Java
import androidx.test.espresso.accessibility.AccessibilityChecks;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MyWelcomeWorkflowIntegrationTest {
@BeforeClass
public void enableAccessibilityChecks() {
AccessibilityChecks.enable();
}
}
デフォルトでは、ViewActions で定義されたビュー アクションを行うと、このチェックが実行されます。チェックの範囲には、アクションを行ったビューと、そのすべての子孫ビューが含まれます。次のコード スニペットに示すように、true を setRunChecksFromRootView() に渡すことで、それぞれのチェックを行っている間に画面のビュー階層全体を評価できます。
Kotlin
AccessibilityChecks.enable().setRunChecksFromRootView(true)
Java
AccessibilityChecks.enable().setRunChecksFromRootView(true);
結果の一部を抑制する
Espresso がユーザー補助機能チェックを実行した後、すぐには対応できない改善点が見つかることがあります。その結果が原因で Espresso テストの失敗が続かないように、一時的にテストを無視できます。ユーザー補助機能テスト
フレームワーク(ATF)では、
setSuppressingResultMatcher()
メソッドでこの機能を使用できます。このメソッドは、指定された
マッチャー式を満たす結果を抑制するように Espresso を設定します。
ユーザー補助機能の 1 つの観点に対処する変更をアプリに加えるとき、他の観点に関する結果をできるだけ多く Espresso に表示させるのが有益です。そのため、特定の改善点のみ抑制することをおすすめします。
後で対処することを予定しているユーザー補助機能テスト結果の表示を一時的に抑制するときは、似たような結果を誤って抑制しないようにすることが重要です。このために、範囲を限定したマッチャーを使用します。具体的には、次のユーザー補助機能チェックのそれぞれを満たす場合にのみ結果を抑制するように、 マッチャー を選びます。
- タッチ ターゲットのサイズを確認するなど、特定タイプのユーザー補助機能チェック。
- ボタンなどの特定の UI 要素を評価するユーザー補助機能チェック。
Espresso テストで表示する結果を定義するために、ATF で定義されているマッチャー
を利用できます。次の例では、1 つの TextView 要素の色のコントラストに関連するチェックの結果を抑制します。要素の ID は countTV です。
Kotlin
AccessibilityChecks.enable().apply {
setSuppressingResultMatcher(
allOf(
matchesCheck(TextContrastCheck::class.java),
matchesViews(withId(R.id.countTV))
)
)
}
Java
AccessibilityValidator myChecksValidator =
AccessibilityChecks.enable()
.setSuppressingResultMatcher(
allOf(
matchesCheck(TextContrastCheck.class),
matchesViews(withId(R.id.countTV))));