6

Wiem, że istnieje wiele pytań wokół tego, ale nie mogę znaleźć nic do mnie :(pomocyAndroid: espresso nie czekać aż fragmentu lub działalności jest pokazany więc każda próba nie powiodła

Próbowałem użyć Espresso do generowania testu interfejsu użytkownika dla aplikacji na Androida Po pobiciu problemów z zależnościami (ponieważ niektóre biblioteki są uwzględniane dwukrotnie w różnych wersjach jako zależność od innych bibliotek) nadal nie mogę tworzyć testów roboczych ...

I wiedzieć o IdlingResource, ale jak czytam, espresso czeka po wyjęciu z pudełka, aż główny wątek i AsyncTaskPool jest bezczynny przed przeprowadzeniem jakichkolwiek testów

Po skontaktowanie się z nim stworzyłem prostą aplikację zawierającą dwie czynności, ekran powitalny i główną funkcję. ekran powitalny zawiera coś takiego dla oczekujących na trzy sekundy przed rozpoczęciem główną działalność

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    finish(); 
    Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class); 
    startActivity(intent); 
    } 
}, 3000); 

Próbowałem również użyć AsyncTask za to, ale nic nie wydaje się działać poprawnie, ponieważ każda próba kończy się niepowodzeniem.

jedynie badanie sprawdza czy TextView zawierające określony tekst jest pokazany na widoku przez:

onView(withText("DummyText")).check(matches(notNullValue())); 

myślałem, że to nie byłoby takie trudne, aby utworzyć prosty test ...

Ponieważ muszę przetestować api> = 16, potrzebuję espresso. Tylko dla mnie, sprawdziłem to za pomocą interfejsu uiAutomator (wiem, że jest to api> = 18), ale jest taka inteligentna logika, aby czekać na coś, co zostanie pokazane ..... i to działa idealnie ...

Odpowiedz

5

Co to jest twoja aktywnośćRule? Ponieważ jeśli jest to SplashScreenActivity, test rozpocznie się natychmiast, a onView zakończy się niepowodzeniem, jeśli widok nie znajduje się na ekranie powitalnym. Spróbuj otworzyć bezpośrednio MainActivity, aby przetestować ten widok. Używam Espresso od jakiegoś czasu i wiem, że metody @Test zaczynają się, gdy aktywność zdefiniowana jako ActivityTestRule zakończyła się ładowaniem.

Mam nadzieję, że to pomogło.

Powodzenia!

+2

Dzięki za porady! mam go pracy po tym jak ogłosił trzeci parametr reguły jako 'fałszywe': '@Rule ActivityTestRule publicznego mMainActivity = new ActivityTestRule <> (SplascreenActivity.class, true, false);' Robiąc to, mogę zdefiniować zachowanie takie jak np . 'DoNothing(), gdy (mDeviceService) .getDevices();' a następnie rozpocząć działalność ręcznie za pomocą 'mSplashscreenActivity.launchActivity (null);'. Zmieniłem także _Handler_ z _AsyncTask_ i znam działanie testowe zgodnie z oczekiwaniami, czekając, sprawdzając, itd ..... – grumpyshoe

+1

Naprawdę niesamowite! Dobra robota! – sunlover3

+0

@grumpyshoe Mam również do czynienia z tym samym problemem, w mojej aplikacji mamy ekran powitalny, który automatycznie nawiguje użytkownika do ekranu logowania, ale mój test nie czeka, aby przejść do logowania i rozpocząć wyszukiwanie tekstu wejściowego edycji użytkownika. Możesz mi pomóc. – Krishnakant

Powiązane problemy