Closed7

スクショテスト実装:screengrabでの撮影に失敗する

nemoteanemotea

Screengrabのバージョン2.0.0 で発生。

[13:29:29]: Pulling captured screenshots from the device
ls: /sdcard/[プロジェクト名]/screengrab: No such file or directory
[13:29:29]: Exit status: 1
ls: /data/data/[プロジェクト名]/app_screengrab: Permission denied
[13:29:29]: Exit status: 1
ls: /data/user/0/[プロジェクト名]/files/[プロジェクト名]/screengrab/ja-JP/images/screenshots: Permission denied
[13:29:29]: Exit status: 1
[13:29:29]: Make sure you've used Screengrab.screenshot() in your tests and that your expected tests are being run.

[13:29:29]: No screenshots were detected 📷❌
nemoteanemotea

問題の原因が判明?

Google Play ストアを含むシステム イメージはリリースキーで署名されています。つまり、それらのイメージでは、昇格された権限(root)を取得することはできません。

https://developer.android.com/studio/run/managing-avds?hl=ja#system-image

起動するエミュレータのroot権限が取得できなかったためフォルダにアクセスできず、撮影したスクショのデータ吸い上げに失敗していたようです。

nemoteanemotea

とりあえず root権限が取得できるエミュレータを使えば問題なくスクショできた。

スクショ取得成功:⭕️、失敗:❌

screengrabバージョン Nexus_5X(playstoreロゴ有) Nexus_6(playstoreロゴ無)
1.2.0 ⭕️ ⭕️
2.0.0 ⭕️

しかし、
root権限が原因だとしたら、逆になぜ v1.2.0 で成功していたのか??とても気持ち悪い。

nemoteanemotea

screengrabの内部実装をみてみる。
スクショ保存先フォルダを定義しているのはここっぽい。
https://github.com/fastlane/fastlane/blob/master/screengrab/lib/screengrab/runner.rb#L149

"/data/user/0/#{app_package_name}/files/#{app_package_name}/screengrab/#{locale}/images/screenshots",
"/data/data/#{app_package_name}/files/#{app_package_name}/screengrab/#{locale}/images/screenshots",
"/data/data/#{app_package_name}/app_screengrab/#{locale}/images/screenshots",
"/data/data/#{app_package_name}/screengrab/#{locale}/images/screenshots"
nemoteanemotea

AndroidStudio の Device File Explorer から確認すると、
端末によってまちまちだが、確かに上記のフォルダのどこかしらにはスクショ保存ができている。
デグレだったら解決してみたいけど、、余裕があったら調べたい。

このスクラップは2021/02/27にクローズされました