uiautomatorによるテストで、端末の回転と、スクリーンショットを撮影する方法です。
uiautomatorの設定と基本的なテストの書き方は先の記事 uiautomatorを試してみた を参照してください。
要件
uiautomator自体はAPI Level 16以上(Android 4.1)で動作しますが、端末の回転とスクリーンショット撮影には、
API Level 17以上(Android 4.2)
が必要です。
端末の回転
// 横向きにしてみる(同時に、端末のセンサによる回転が抑止されます) getUiDevice().setOrientationLeft(); // 回転されるのを待つ Thread.sleep(1000); // 横向きでのテスト (snip) // 端末の回転抑止を解除 getUiDevice().unfreezeRotation();
回転方向には、上記のLeftのほか、Right、Naturalがあります。Nexus7ではNaturalが縦方向(Portrait)でしたが、Naturalが横方向の端末も出てくるのかも知れません。(テストを書く立場からすると誰得な仕様に思えますが)
回転の完了をThread#sleep()で待っていますが、通常の画面遷移とことなるのでUiObjectのメソッドで判断できず、とりあえずこうしてみました。
最後に#unfreezeRotation()メソッドを呼んでいますが、これを呼ばずにテストを終わるとセンサーが抑止されたままになります。
【11/27追記】これはtearDown()で呼ぶほうがいいですね。
スクリーンショットの撮影
File storePath = new File("/mnt/sdcard/Pictures/test.png"); getUiDevice().takeScreenshot(storePath);
これで指定したパスにスクリーンショット画像が保存されます。uiautomationは端末側で動作しますので、端末内のパスを指定しなければなりません。
他に、scale, quorityを指定できるオーバーロードメソッドもあります。
撮影したスクリーンショットは、adb pullコマンドで取り出せます。
$ adb pull /mnt/sdcard/Pictures/test.png test.png