TOYAMA Sumio

Results 10 issues of TOYAMA Sumio

`uiautomator/`ディレクトリ配下にある、サンプルのテストスクリプトは、新しいUI Automator 2.xでは動作しない。 このPRは、UI Automator 2.xに対応したサンプルスクリプトを`uiautomator2/`ディレクトリに作成するためのものである。 現時点でのタスクの進捗状況は以下の通り。 - [x] 既存の(uiautomator向けの)スクリプトを、必要最小限の修正で動かすサンプルを作る。deprecatedなAPIも利用する。 - [ ] 上記から、deprecatedなAPIを取り除いたものを作る。APIは既存の`UiObject`をそのまま使う。 - [x] 上記から、UI Automator 2.xの新APIである`UiObject2`を最大限利用したサンプルを作る。 - [ ] サブディレクトリ名(`legacy-api/`と`new-api/`)が分かりにくいので、もう少し良い命名を検討する。 - [ ] `NumberPicker`の操作がうまく動かない点について、何らかの対処をする。 - [ ]...

I am an Android app developer. When I use AirTest for Android apps, I often run tests while viewing Logcat in Android Studio. In that case, if the version of...

機能追加や修正が落ち着いたタイミングで、0.1.0としてリリースする

DialogFragmentPageの https://github.com/MobilityTechnologies/gogo-screenshot-android/blob/main/library/src/main/java/app/mobilitytechnologies/uitest/page/DialogFragmentPage.kt#L143-L158 ではリフレクションを使っていますが、ここで使われている - KClass#constructors - KCallable#parameters - KCallable#call は、いずれも(`kotlin.reflect.full`ではなく) `kotlin.reflect` パッケージにあるにもかかわらず、`kotlin-reflect` ライブラリが必要であることがわかりました。 そのため、依存関係に、 `org.jetbrains.kotlin:kotlin-reflect` を追加する必要があります。

FragmentScenarioPageには、Fragmentの生成方法を指定した`launchFragmentByCreator`があるが、 ActivityScenarioPageには、それに対応するメソッドが無い。 [MonitoringInstrumentation.interceptActivityUsing](https://developer.android.com/reference/androidx/test/runner/MonitoringInstrumentation#interceptactivityusing)を使えばActivityでも可能なので、ActivityScenarioPageに当該メソッドを追加する。

現在の`DialogFragmentPage.launchDialogFragmentByCreator`の実装では、 目的のDialogFragmentを`showNow()`が完了するまで待ち合わせている。 言い換えると、`showNow()`がリターンした時点で描画が完了することを前提としている。 一方で`showNow()`完了、かつ、`DialogFragment.onResume()`完了後(`FragmentLifecycleCallbacks#onFragmentResumed()`)まで待つ必要がある、という説があり、現時点で確証が無い。

スクリーンショットファイルを/sdcard/に保存するために、API 29では、Android Manifestに、以下の設定を入れなければいけないので、READMEに追記する。 ```xml ```

`UiTestExtension`の`beforeEach`メソッドや`afterEach`メソッドでは、UIテストでよく利用する`CountingIdlingResource`などの初期化が行われています。 本ライブラリを適用するプロジェクトによっては、さらに追加で共通的に初期化したい処理が必要になることがあります。 (例: RxJavaを使っているプロジェクトではRxIdlerのセットアップが必要) 現状では、`Simple{Activity,Fragment,DialogFragment}Page`の`starting()`メソッドで、そのような初期化を行うことになっていますが、この方法だと3つのPageクラスそれぞれで同じ処理を書かなければなりません。 そのような全部で共通の処理が書けるように、`UiTestExtension`を拡張可能にしたいです。 openクラスにするだけでも良いかも知れません。

[起動オプション](https://github.com/MobilityTechnologies/gogo-screenshot-android#%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E8%B5%B7%E5%8B%95%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3) の `encodeScreenshotFileName ` を `false` にしていた場合、`SnapShot.zipAll()`で生成されるzipファイルが0バイトになります。 `encodeScreenshotFileName ` を `false` のときは、スクリーンショットファイルは、画面ごとにサブディレクトリが作られ、その中に画像が格納されるのですが、zipAll()メソッドの現実装では、サブディレクトリの中にスクリーンショットがあるケースが考慮されていません(ディレクトリを再帰的に圧縮するように実装されていません)。

https://github.com/MobilityTechnologies/gogo-screenshot-android#%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97 に書かれている指示にしたがって、finish()メソッド内で`SnapShot.zipAll()`を呼び出すようにしていると、 スクリーンショットが1つも無い場合(たとえば、セットアップ直後の場合)にクラッシュしてしまいます。 `SnapShot.zipAll()`内で、圧縮対象のファイルが1つも無い場合のハンドリングが必要です。