UI Automator

UI Automator は、システムアプリとインストール済みアプリにまたがるアプリ間の UI 機能テストに適した UI テスト フレームワークです。

UI Automator テスト フレームワークには、UI テストを作成するための API が複数用意されており、ユーザーアプリとシステムアプリの両方のインタラクションを対象としたテストが行えます。UI Automator API により、テストデバイス上で設定メニューやアプリ ランチャーを開くなどのオペレーションが可能になります。UI Automator テスト フレームワークでは、テストコードがターゲット アプリの細かい内部実装に依存しておらず、ブラックボックス スタイルの自動化テストの作成に適しています。

UI Automator テスト フレームワークの主要な機能は次のとおりです。

  • レイアウト階層を検査するビューア。詳細については、UI Automator ビューアをご覧ください。
  • ターゲット デバイスの状態情報を取得してオペレーションを実行する API。詳細については、デバイスの状態にアクセスするをご覧ください。
  • 複数のアプリにまたがる UI テストをサポートする API。詳細については、UI Automator API をご覧ください。

UI Automator ビューア

uiautomatorviewer ツールは、Android デバイスに表示されている UI コンポーネントをスキャンして分析するのに便利な GUI を備えています。このツールにより、レイアウト階層を検査して、デバイスのフォアグラウンドに表示される UI コンポーネントのプロパティを確認できます。この情報により、UI Automator できめ細かいテストを作成することが可能になります。たとえば、特定の表示プロパティに対応する UI セレクタを作成できます。

uiautomatorviewer ツールは、<android-sdk>/tools/bin ディレクトリにあります。

デバイスの状態にアクセスする

UI Automator テスト フレームワークには、ターゲット アプリが実行されるデバイスにアクセスしてオペレーションを実行するための UiDevice クラスが用意されています。このクラスのメソッドを呼び出すことにより、その時点でのデバイスの向きや表示サイズなどのデバイス プロパティにアクセスできます。UiDevice クラスでは、次のようなアクションも実行できます。

  • デバイスの回転を変更する。
  • 「音量大」などのハードウェア キーを押す。
  • 「戻る」ボタン、ホームボタン、メニューボタンをクリックする。
  • 通知シェードを開く。
  • 現在のウィンドウのスクリーンショットを撮る。

たとえば、ホームボタンの押下をシミュレートするには、UiDevice.pressHome() メソッドを呼び出します。

UI Automator API

UI Automator API を使用すると、ターゲットとするアプリの詳細な実装を把握していなくても、堅牢なテストを作成することが可能になります。以下の API により、複数のアプリにまたがる UI コンポーネントをキャプチャして操作できます。

  • UiCollection: コンテナの UI 要素を列挙して、可視テキストや content-description 属性によって、子要素を数え上げ、ターゲットにします。
  • UiObject: デバイス上に表示される UI 要素を表します。
  • UiScrollable: スクロール可能な UI コンテナ内のアイテムの検索をサポートします。
  • UiSelector: デバイス上にある 1 つ以上のターゲット UI 要素に対するクエリを表します。
  • Configurator: UI Automator テストを実行するための主要なパラメータの設定できるようにします。

たとえば、次のコードは、デフォルトのアプリ ランチャーをデバイスに表示するテスト スクリプトの作成方法を示しています。

Kotlin

    device = UiDevice.getInstance(getInstrumentation())
    device.pressHome()

    // Bring up the default launcher by searching for a UI component
    // that matches the content description for the launcher button.
    val allAppsButton: UIObject = device.findObject(
            UiSelector().description("Apps"))

    // Perform a click on the button to load the launcher.
    allAppsButton.clickAndWaitForNewWindow()
    

Java

    device = UiDevice.getInstance(getInstrumentation());
    device.pressHome();

    // Bring up the default launcher by searching for a UI component
    // that matches the content description for the launcher button.
    UiObject allAppsButton = device
            .findObject(new UiSelector().description("Apps"));

    // Perform a click on the button to load the launcher.
    allAppsButton.clickAndWaitForNewWindow();
    

UI Automator の使用方法の詳細については、API リファレンスと、複数のアプリの UI をテストするためのガイドをご覧ください。

参考情報

Android テストで UI Automator を使用する方法の詳細については、次のリソースをご覧ください。

サンプル

  • BasicSample: UI Automator の基本的なサンプルです。