2017-03-31 1 views
1

Je suis en train de tester une application Android avec Espresso. J'ai un widget EditText avec androidInputType=date. Quand je touche ce contrôle avec mon doigt, un calendrier apparaît pour que je sélectionne la date.Sélectionnez la date du calendrier dans Android Espresso

Comment l'automatiser dans Espresso? J'ai regardé partout et je ne peux pas comprendre. typeText() ne fonctionne certainement pas.

+0

peut vous montrer les ids et leur type de données. ID du calendrier que vous devez cliquer. –

+0

Je viens de voir que ma réponse ci-dessous semble aussi aider les autres. Si cela résout votre problème ce serait bien si vous pouviez l'accepter comme une réponse correcte? – stamanuel

Répondre

7

originale répondu par moi ici, mais dans le cadre d'une autre question: Recording an Espresso test with a DatePicker - donc je reposte ma réponse adaptée à partir de là:

Utilisez cette ligne pour définir la date dans un DatePicker:

onView(withClassName(Matchers.equalTo(DatePicker.class.getName()))).perform(PickerActions.setDate(year, monthOfYear, dayOfMonth)); 

Ceci utilise le PickerActions qui fait partie de la bibliothèque de support espresso - le espresso-contrib. Pour l'utiliser, ajoutez comme celui-ci à votre fichier gradle (Vous avez besoin de plusieurs excludes pour éviter des erreurs de compilation en raison de désadaptation version de la bibliothèque de soutien):

androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') { 
    exclude group: 'com.android.support', module: 'appcompat' 
    exclude module: 'support-annotations' 
    exclude module: 'support-v4' 
    exclude module: 'support-v13' 
    exclude module: 'recyclerview-v7' 
    exclude module: 'appcompat-v7' 
} 

Ensuite, vous pouvez créer une méthode d'assistance qui clique sur le point de vue qui ouvre la datepicker, fixe la date et confirme en cliquant sur le bouton ok:

public static void setDate(int datePickerLaunchViewId, int year, int monthOfYear, int dayOfMonth) { 
    onView(withParent(withId(buttonContainer)), withId(datePickerLaunchViewId)).perform(click()); 
    onView(withClassName(Matchers.equalTo(DatePicker.class.getName()))).perform(PickerActions.setDate(year, monthOfYear, dayOfMonth)); 
    onView(withId(android.R.id.button1)).perform(click()); 
} 

et puis l'utiliser comme ceci dans vos tests:

TestHelper.setDate(R.id.date_button, 2017, 1, 1); 
//TestHelper is my helper class that contains the helper method above 
+0

J'ai dû remplacer "2.2.2" par "2.2" pour éviter les conflits de construction. – Hack06