@Test
public void test3_PaySuccessful(){
init();
ViewInteraction amountEditText = onView(
allOf(withId(R.id.et_amount), isDisplayed()));
amountEditText.perform(replaceText("SGD 0.010"), closeSoftKeyboard());
//, withText("Proceed")
ViewInteraction appCompatButton = onView(
allOf(withId(R.id.btn_confirm), isDisplayed()));
appCompatButton.perform(click());
//, withText("Pay")
ViewInteraction appCompatButton2 = onView(
allOf(withId(R.id.btn_confirm), isDisplayed()));
appCompatButton2.perform(click());
//dialog
ViewInteraction appCompatButton3 = onView(
allOf(withId(R.id.confirm_button), withText("Confirm"), isDisplayed()));
appCompatButton3.perform(click());
//have to disable animation in order to pass this.
intended(CoreMatchers.allOf(hasComponent(PaymentSelectionActivity2.class.getName())));
}
アニメーションを含むビューでエスプレッソのテストを行うと問題が発生しました。エスプレッソはアニメーションを処理できないことがわかっているので、以下で説明しました。 -テストデバイスのウィンドウアニメーション、トランジションアニメーション、アニメーターの継続時間スケールをすべてオフに設定します(これは機能しません)-コードにフラグを追加しようとしました。 espresso_testing = true。 trueの場合、コードはすべてのstartAnimation()関数呼び出しの呼び出しをスキップします。 --->これは機能しています。ただし、エスプレッソテストケースの作成中にアプリのコードを変更できないという要件があります。上記のテストケースが含まれています。
これを行う他の方法はありますか?前もって感謝します。
プラグインを常に最新の状態に保つようにしてください:
buildscript {
repositories {
google()
gradlePluginPortal()
}
dependencies {
classpath 'com.Android.tools.build:gradle:3.3.0'
}
}
testOptions
と呼ばれるanimationsDisabled
の新しいフラグを使用:
Android {
...
testOptions {
animationsDisabled = true
}
}
デバイス/エミュレータのアニメーションを手動でオフにしてみてください:
不安定を避けるため、テストに使用する仮想デバイスまたは物理デバイスでシステムアニメーションをオフにすることを強くお勧めします。デバイスの[設定]> [開発者オプション]で、次の3つの設定を無効にします。
ウィンドウアニメーションスケールトランジションアニメーションスケールアニメーターデュレーションスケール
出典:https://developer.Android.com/training/testing/espresso/setup#set-up-environment
コマンドラインでadb
を使用してみてください:
# Turn off animations
adb Shell settings put global window_animation_scale 0 &
adb Shell settings put global transition_animation_scale 0 &
adb Shell settings put global animator_duration_scale 0 &
出典:https://github.com/jaredsburrows/Android-gif-example/blob/master/.travis.yml#L34
LinkedInのTestButler
:を試すことができます
TestButler.verifyAnimationsDisabled(InstrumentationRegistry.getTargetContext());
エスプレッソテスト用にTestRule
およびGradle
タスクを作成してみてください:
出典:https://product.reverb.com/disabling-animations-in-espresso-for-Android-testing-de17f7cf236f
確かに、本番コードにテストコードを追加するべきではありません。ここでの問題はアニメーションにあります。 Handlers
とRunnables
を使用してアニメーションを実行している場合、開発者オプションを使用してそれらをオフにすることはできません。これを使用してアニメーション化する一般的な場所は、カスタムビューです。
ただし、カスタムビューでも、ValueAnimator
、ObjectAnimator
、またはAnimatorSet
のいずれかを使用してアニメーションを実行してください。開発者オプションでAnimator duration scale
をオフにして、アニメーションをオフにすることができます。
適切なリファレンスはProgressBar
です。
これを見ることができます repo
プロジェクトをビルドし、生成された.apkファイルをダウンロードし、そのプロジェクトに記載されている指示に従ってアニメーションを無効にします。その後、スムーズに航行できるはずです。他の多くのソースから同じ.apkファイルをダウンロードすることもできます。 .apkファイルを入手したら、次のコマンドを発行します。
adb install -r Android_emulator_hacks.apk
adb Shell pm grant no.finn.Android_emulator_hacks Android.permission.SET_ANIMATION_SCALE
adb Shell am start -n no.finn.Android_emulator_hacks/no.finn.Android_emulator_hacks.HackActivity
これにより、システムアニメーションが無効になります。