1) Wszystkie testowane urządzenia/emulatory mają wyłączone animacje.Test Flaky Android Espresso - Snackbar
2) Mam @ BegletClass, który buduje mój obiekt Credentials.
3) Mam IntenServiceIdlingResource i EventBusIdlingResource, zarejestrowany w @ Przed rozpoczęciem.
4) Po kliknięciu przycisku logowania IntentService odpala się. W takim przypadku serwer (fałszywy serwer) zwraca błąd 500. Informacje te są przesyłane z powrotem do interfejsu użytkownika z IntentService za pośrednictwem EventBus greenrobota, a pasek Snackbar jest wyświetlany wraz z komunikatem o błędzie.
Oto kod do testu:
@Test
public void a_userNamePasswordTest() throws Exception {
// email input
ViewInteraction userNameView = onView(withId(R.id.email));
// verify it's on screen and enabled
userNameView.check(matches(isDisplayed())).check(matches(isEnabled()));
// set the username
userNameView.perform(scrollTo(), replaceText(credentials.username), closeSoftKeyboard());
// password input
ViewInteraction passwordView = onView(withId(R.id.password));
// verify it's on screen and enabled
passwordView.check(matches(isDisplayed())).check(matches(isEnabled()));
// set the password.
passwordView.perform(scrollTo(), replaceText(credentials.password), closeSoftKeyboard());
// sign in button
ViewInteraction signInButton = onView(withId(R.id.email_sign_in_button));
// verify the button
signInButton.check(matches(allOf(
isDisplayed(), isEnabled(), withText("Sign In"), withContentDescription("Sign In")
)));
// clickity click the button
signInButton.perform(scrollTo(), click());
// verify the snackbar text
onView(withText(startsWith("Server Error: 500"))).check(matches(isDisplayed()));
}
To jest wyjątek I zazwyczaj:
SignInExceptionTest > a_userNamePasswordTest[Nexus_6P_API_23(AVD) - 6.0] FAILED android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with text: a string starting with "Server Error: 500"
Według mojego logowania, moje zasoby na biegu jałowym pracuje. Ale patrząc na znaczniki czasu dla dzienników, wyjątek ma miejsce około 5 sekund po tym, jak zasoby bezczynności zostały bezczynne.
Wygląda na to, że występuje opóźnienie między momentem braku zasobów a próbą wyszukania widoku.
Inne potencjalnie istotne szczegóły:
- minSdk: 20
- kompilacji & targetSdk 25
- buildTools: 25.0.2
- wsparcie Biblioteka: 25.1.1
- espresso rdzeń : 2.2.2
- wtyczka gradle 2.3.0-beta3
W jaki sposób mogę naprawić ten test, aby nie był łuszczący się, poza podnoszeniem czasu wyświetlania moich bufetów?
DZIĘKUJEMY. Zależność Espresso od IdlingResource doprowadzała mnie do bananów. Nie ma po prostu dobrego powodu, aby zraszać kod testowy do moich klas i tak powinno się to robić właściwie. Nadal nie mogę uwierzyć, że Espresso nie ma już czegoś takiego! –