0

J'écris mes cas de test pour mon application mais j'ai rencontré quelques problèmes mineurs. Beaucoup de mes cas de test ont des appels SystemClock.Sleep, afin que la vue puisse charger toutes les données et les afficher à l'écran. Cependant, le nombre de dortoirs pour ce faire a augmenté de plus en plus, ce qui a prolongé la durée de ces tests.Alternative pour SystemClock.sleep dans Andriod Espresso

Voici un exemple d'un de ces tests

@Test 
public void testSearch() { 

    ExtensionForExpresso.signUp(); 

    SystemClock.sleep(17000); 

    onView(withId(R.id.menu_offer_search)).check(matches(isDisplayed())).perform(click()); 

    SystemClock.sleep(5000); 

    onView(withId(R.id.menu_search)).check(matches(isDisplayed())).perform(typeText("Pizza")); 

    SystemClock.sleep(17000); 

    onView(withId(R.id.searchSectionSeeAllButton)).check(matches(isDisplayed())).perform(click()); 

    SystemClock.sleep(15000); 

    onView(withId(R.id.searchResultsRecyclerView)).check(matches(isDisplayed())).perform(RecyclerViewActions.actionOnItemAtPosition(1, click())); 
} 

Y at-il une alternative au sommeil qui attendra pour une vue apparaisse? Ou y a-t-il des méthodes ou des fonctions que je peux ajouter pour réduire le nombre d'appels SystemClock.sleep?

Un grand merci :)

Répondre

0

Je vous recommande de mettre en œuvre un IdlingResource et désactiver les animations du système en premier. La manière la plus simple de désactiver les animations système est this.

Il n'est pas nécessaire d'utiliser la méthode SystemClock.sleep(). Au lieu de cela, vous pouvez mettre en œuvre une méthode de sommeil personnalisé comme ceci:

public void waitFor(int seconds) { 
     seconds = seconds < 0 ? 0 : seconds; 
      while (--seconds >= 0) { 
       try { 
        Thread.sleep(1000); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
} 

Ensuite, vous pouvez l'appeler dans votre test comme: waitFor(2); // 2 second wait