自動テストで撮ったスクリーンショットが薄い
Androidアプリの自動テストで画面キャプチャを取ると画面遷移の直後などで以下のように薄い画像を取得する場合がある。
これは画面遷移の直後でアニメーションの終了前にキャプチャを取得しているため。
エミュレータのアニメーションを無効にする
アニメスケールをオフにすれば一定のアニメーションを無効化できる。
設定画面からアニメーションを無効化する
事前に開発者向けオプションを有効化しておく。
開発者向けオプションを開き、以下の値を「アニメーションオフ」に設定する。
- ウインドウアニメスケール
- トランジションアニメスケール
- Animator再生時間スケール
adbコマンドでアニメーションを無効化する
上記設定をadbコマンドで行う。
adb shell settings put global window_animation_scale 0.0
adb shell settings put global transition_animation_scale 0.0
adb shell settings put global animator_duration_scale 0.0
変更後の画像
設定変更後に再度テストを実行し画面キャプチャが薄くならなければ成功。
animationsDisabled
上記設定をしてもアプリケーションレイヤーのアニメーションは無効にならない。
実行するテストがプロジェクト管理下にある場合、animationsDisabled
の設定によりアプリケーションレイヤーのアニメーションも無効にできる。
testOptionsにanimationsDisabled
の設定を追加する。
android {
testOptions {
animationsDisabled = true
}
}
環境変数へ逃がしておくと便利。
android {
testOptions {
animationsDisabled = System.getenv("ANIMATIONS_DISABLED") == "true"
}
}
設定を変更しすぎるとProductionビルドとの差異が大きくなり何をテストしているのかが分からなくなるのでチームで共有して適切に設定する。
\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/