Je veux être en mesure de tester mon viewpager qui a dynamique (le nombre de pages n'est pas connu à l'avance) ensemble de pages, exécuter quelques asserts et être en mesure de prendre une capture d'écran.Balayez à travers ViewPager et prendre des captures d'écran
Étant donné que le viewpager a un ensemble dynamique de pages, je ne peux pas dire à l'avance combien de fois je veux swipeLeft()
.
Alors, je l'ai écrit une contrainte personnalisée:
/**
* Moves to the left by one page.
*/
public static ViewAction scrollLeftUntilEnd() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isDisplayingAtLeast(90);
}
@Override
public String getDescription() {
return "ViewPager scroll one page to the left";
}
@Override
public void perform(final UiController uiController, final View view) {
uiController.loopMainThreadUntilIdle();
final ViewPager viewPager = (ViewPager) view;
final int current = viewPager.getCurrentItem();
final int size = viewPager.getAdapter().getCount();
for (int i = 0; i < size; i++) {
viewPager.setCurrentItem(i + 1, true);
takeScreenshot("ViewPager_Cards");
}
uiController.loopMainThreadUntilIdle();
}
};
}
que j'appelle comme ceci:
onView(withId(R.id.myViewPager)).perform(scrollLeftUntilEnd());
mais la page se déplace vers la gauche une seule fois.
Est-ce parce que le ViewAction
retourné par scrollLeftUntilEnd()
peut seulement effectuer une fois et pas dans une boucle?
Je ne pouvais pas utiliser repeatedlyUntil(swipeLeft(), ...);
car j'ai besoin de prendre des captures d'écran à chaque page.
Bonne prise. Cependant, même avec ce changement je ne peux pas obtenir une capture d'écran pour chaque page, je vois seulement des captures d'écran pour la première et la dernière page. J'ai besoin de faire une pause à chaque écran, d'obtenir une capture d'écran, puis de faire glisser à nouveau. –