W klasie Espresso:Espresso.pressBack() nie wymaga onBackPressed()
@Rule
public IntentsTestRule<MainActivity> mIntentsRule = new IntentsTestRule<>(
MainActivity.class);
@Test
public void test_backButton(){
onView(withId(R.id.NEXT_ACTIVITY)).perform(scrollTo(), click());
Espresso.pressBack();
}
W Aktywny:
@Override
public void onBackPressed() {
Log.d("TEST_pressBack", "inside onBackPressed()");
do_something();
super.onBackPressed();
}
@Override
public void finish() {
Log.d("TEST_pressBack", "inside finish()");
super.finish();
}
Kiedy wywołać metodę testową Espresso wykonanie idzie bezpośrednio do finish()
.
Po naciśnięciu przycisku wstecz (z moją ręką) w numerze Activity
wykonanie odbywa się najpierw w onBackPressed()
, a następnie pod numerem finish()
. Jak mogę przetestować funkcję onBackPressed()
za pomocą ekspresu espresso? Dzięki!
EDYTOWANIE: To jest mój błąd. Problem polegał na tym, że w Działaniu, w którym chciałem zadzwonić pressBack, otwarto klawiaturę ekranową. Gdy klawiatura jest otwarta, przycisk nie wywołuje funkcji BackPressed, ale powoduje, że klawiatura nie jest wyświetlana. Próbowałem z dwóch pressBack() z rzędu i to działało poprawnie:
@Rule
public IntentsTestRule<MainActivity> mIntentsRule = new IntentsTestRule<>(
MainActivity.class);
@Test
public void test_backButton(){
onView(withId(R.id.NEXT_ACTIVITY)).perform(scrollTo(), click());
Espresso.pressBack();
//The extra pressBack()
Espresso.pressBack();
}
Mogłeś użyć Espresso.closeSoftKeyboard() –