UIコンポーネントを操作するためのメソッドはUiObjectクラスにまとめられています。以下デ代表的なものについて説明しますが、より詳細な情報はAPIリファレンスを参照してください。
setText()メソッドは、テストを実行する端末の言語設定が英語で、かつ、IMEが英語入力モードでないと、想定とは異なる文字列が設定されることがあります。入力できるテキストも原則ASCIIの範囲に限定されます。
マルチバイト文字を扱う方法などについては、次回応用編で紹介します。
uiautomatorにおけるテストでは、JUnit 3で提供されている「assertEquals(expected, actual)」などのアサーションメソッドを用いて検証します。
UIコンポーネントの属性などを取得するメソッドはUiObjectクラスに用意されています。そのメソッドにより取得したUIコンポーネントの属性(actual)が、期待(expected)通りであるかどうかを、assertEquals()メソッドで検証します。
UiObjectクラスに用意されている、主な属性取得系のメソッドは以下の通りです。
テストを実行する端末がAndroid 4.2以上の場合は、「UiDevice」クラスのsetOrientationから始まるメソッドを呼び出すことで、端末を指定された向きに回転させることができます。より正確に言うと、端末を指定された向きに回転したかのように、画面の向きが変化します。
setOrientationNatural()は、端末を「自然な向き」に持ったときに画面の向きが正しくなるように、画面を回転します。setOrientationRight()とsetOrientationLeft()は、端末を「自然な向き」から右または左に回転させたときに、画面の向きが正しくなるように画面を回転します。
「自然な向き」がどういう状態なのかは端末依存ですが、setOrientationNatural()を呼んだ後にgetDisplayHeight()・getDisplayWidth()メソッドを呼び出すことで、「自然な状態」における画面の高さと幅を取得できるようになっています。
また、freezeRotation()メソッドでセンサーによる画面の自動回転を無効にできます。これはunfreezeRotation()メソッドで解除(有効に)できます。
これらのメソッドを使うに当たっては、以下の点に注意してください。
テストを実行する端末がAndroid 4.2以上の場合は、「UiDevice.takeScreenshot()」メソッドを呼び出すことで、任意のタイミングで画面のスクリーンショットを撮影できます。
takeScreenshot()の引数には、保存先のパスを持つFileオブジェクトを指定できます。
// 端末内部の /mnt/sdcard/Pictures/ ディレクトリに // screenshot.png というファイル名でスクリーンショットを保存する。 File filePath = new File("/mnt/sdcard/Pictures/screenshot.png"); getUiDevice().takeScreenshot(filePath);
なお、スクリーンショットの保存先は、テストを実行する端末内部のストレージになるため、後からスクリーンショットを端末から取り出す必要があります。そのためにはadb pullコマンドを利用します。
$ adb pull {端末側に保存したスクリーンショットファイルへのフルパス}
{端末側に保存したスクリーンショットファイルへのフルパス}には、上記の例であれば/mnt/sdcard/Pictures/screenshot.pngを指定します。
uiautomatorでテストを実行するには、テストスクリプトをビルドして得られるjarファイルを、テストを実行する端末内の/data/local/tmp/ディレクトリにインストール(転送)しておく必要があります。テストを実行したい端末をUSBケーブルなどで接続し、adbで認識された状態にしておいてください。
また、端末やエミュレーターを複数接続している場合は、インストール時とテスト実行時のコマンドラインに以下のオプション引数を追加する必要があります。
ここで{シリアル番号}は、テストを実行したい端末のシリアル番号を表します。接続している端末のシリアル番号はadb devicesコマンドを実行すると知ることができます。
以下では、「uiautomatorテストプロジェクトのセットアップ」の章で例に出したUiautomatorSampleプロジェクトを例に、テストをビルド・インストールし、実行する方法を説明します。
Apache Antのbuildターゲットを実行します。
$ cd uiautomator $ ant build
ビルドが成功すると、「bin/」ディレクトリにUiautomatorSample.jarという名前のjarファイルが生成されます。このjarファイル名の.jar取り除いた部分は「テストプロジェクトを作成する」の章でandroid create uitest-projectコマンドを実行したときに-nオプションで指定した名称となります。
Apache Antのinstallターゲットを実行します。
$ ant install
adbコマンドを直接実行してインストールすることもできます。その場合は、以下のコマンドを実行してください。
$ adb push bin/UiautomatorSample.jar /data/local/tmp/
ここで、bin/UiautomatorSample.jarの箇所には、ビルド時に生成したjarファイルへのパスを指定します。
以下のコマンドを実行します。
$ adb shell uiautomator runtest UiautomatorSample.jar -c com.nowsprinting.hellotesting.uiautomator.CustomerDetailTest
ここで、UiautomatorSample.jarの部分には、テスト対象デバイスに転送したjarファイル名のみを指定します。パスは指定しない点に注意してください。
-cオプションには、実行したいテストケース(UiAutomatorTestCaseのサブクラス)のクラス名をFQCN(Fully Qualified Class Name)で指定します。このオプションは、テストを実行する端末がAndroid 4.3以上の場合は省略することもできます。省略した場合、テストプロジェクトのjarファイルに含まれる全テストケースが実行されます。
サンプルのテストスクリプトを実行する場合は、テスト実行に先立って、テスト対象デバイス上で、サンプルアプリ起動直後の画面(顧客一覧画面)を表示させておいてください。
テスト実行のために入力するコマンドは、コマンドライン引数の値なども含めて、上記コマンド例と同じです。
uiautomatorコマンドの引数についての詳細は、uiautomatorコマンドのマニュアルを参照してください。
今回は、uiautomatorについて、基本的なところを説明しました。最低限、今回の記事の内容を理解しておけば、テストスクリプトを書き始めることができるでしょう。
次回は、知っておくと便利な、uiautomatorの応用的なトピックを紹介します。
外山 純生
NTTソフトウェア株式会社勤務。数年前よりAndroidアプリケーション開発にかかわり始めたのを切っ掛けに、Androidにおける自動テストに興味を持つようになる。Android関連プロジェクトに対する技術支援業務に携りながら、Android向けのテストツールがもっと広く使われるようになることを願って、ブログにて技術情報を発信中
Blog:sumioの技術メモ
Twitter:@sumio_tym
Copyright © ITmedia, Inc. All Rights Reserved.