Cadre de test d'espresso - Voir les correspondants
Le framework Espresso fournit de nombreux correspondants de vue. Le but de la correspondance est de faire correspondre une vue en utilisant différents attributs de la vue tels que l'ID, le texte et la disponibilité de la vue enfant. Chaque correspondance correspond à un attribut particulier de la vue et s'applique à un type de vue particulier. Par exemple, la correspondance withId correspond à la propriété Id de la vue et s'applique à toutes les vues, tandis que la correspondance withText correspond à la propriété Text de la vue et s'applique uniquement à TextView .
Dans ce chapitre, apprenons les différents matchers fournis par le framework de test espresso ainsi que la bibliothèque Hamcrest sur laquelle les matchers espresso sont construits.
Bibliothèque Hamcrest
La bibliothèque Hamcrest est une bibliothèque importante dans le cadre du cadre de test d'espresso. Hamcrest est lui-même un framework pour écrire des objets matcher. Le framework Espresso utilise largement la bibliothèque Hamcrest et l'étend chaque fois que nécessaire pour fournir des matchers simples et extensibles.
Hamcrest fournit une fonction simple assertThat et une collection de matchers pour affirmer n'importe quel objet. assert qui a trois arguments et ils sont comme indiqué ci-dessous -
Chaîne (description du test, facultatif)
Objet (réel)
Matcher (attendu)
Écrivons un exemple simple pour tester si un objet liste a une valeur attendue.
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.MatcherAssert.assertThat;
@Test
public void list_hasValue() {
ArrayList<String> list = new ArrayList<String>();
list.add("John");
assertThat("Is list has John?", list, hasItem("John"));
}
Ici, hasItem renvoie un matcher, qui vérifie si la liste réelle a spécifié une valeur comme l'un des éléments.
Hamcrest a beaucoup de matchers intégrés et également des options pour créer de nouveaux matchers. Voici quelques-uns des apparieurs intégrés importants utiles dans le cadre de test d'espresso:
n'importe quoi - toujours assortis
Matchers basés sur la logique
allOf - n'acceptez un nombre quelconque de matchers et de matchs que si tous les matchers réussissent.
anyOf - accepter n'importe quel nombre de matchers et de matchs si un match a réussi.
not - n'acceptez qu'un matcher et ne correspond que si le matcher a échoué et vice versa.
Correspondances basées sur du texte
equalToIgnoringCase - utilisé pour tester si l'entrée réelle est égale à la chaîne attendue en ignorant la casse.
equalToIgnoringWhiteSpace - utilisé pour tester si l'entrée réelle est égale à la chaîne spécifiée en ignorant la casse et les espaces.
containsString - utilisé pour tester si l'entrée réelle contient la chaîne spécifiée.
endsWith - utilisé pour tester si l'entrée réelle commence par la chaîne spécifiée.
startsWith - utilisé pour tester si l'entrée se termine par la chaîne spécifiée.
Matchers basés sur le nombre
closeTo - utilisé pour tester si l'entrée réelle est proche du nombre attendu.
greaterThan - utilisé pour tester si l'entrée réelle est supérieure au nombre attendu.
greaterThanOrEqualTo - utilisé pour tester si l'entrée réelle est supérieure ou égale au nombre attendu.
lessThan - utilisé pour tester si l'entrée réelle est inférieure au nombre attendu.
lessThanOrEqualTo - utilisé pour tester si l'entrée réelle est inférieure ou égale au nombre attendu.
Matchers basés sur des objets
equalTo - utilisé pour tester si l'entrée réelle est égale à l'objet attendu
hasToString - utilisé pour tester si l'entrée réelle a la méthode toString.
instanceOf - utilisé pour tester si l'entrée réelle est l'instance de la classe attendue.
isCompatibleType - utilisé pour tester si l'entrée réelle est compatible avec le type attendu.
notNullValue - utilisé pour tester si l'entrée réelle n'est pas nulle.
sameInstance - utilisé pour tester si l'entrée réelle et attendue sont de la même instance.
hasProperty - utilisé pour tester si l'entrée réelle a la propriété attendue
is - Sucre ou raccourci pour égal
Matchers
Espresso fournit la méthode onView () pour faire correspondre et trouver les vues. Il accepte les correspondances de vue et renvoie l'objet ViewInteraction pour interagir avec la vue correspondante. La liste fréquemment utilisée des correspondants de vue est décrite ci-dessous -
withId ()
withId () accepte un argument de type int et l'argument fait référence à l'id de la vue. Il renvoie un matcher, qui correspond à la vue en utilisant l'id de la vue. L'exemple de code est le suivant,
onView(withId(R.id.testView))
withText ()
withText () accepte un argument de type string et l'argument fait référence à la valeur de la propriété text de la vue. Il renvoie une correspondance, qui correspond à la vue en utilisant la valeur de texte de la vue. Il s'applique uniquement à TextView . L'exemple de code est le suivant,
onView(withText("Hello World!"))
withContentDescription ()
withContentDescription () accepte un argument de type string et l'argument fait référence à la valeur de la propriété de description de contenu de la vue. Il renvoie un matcher, qui correspond à la vue en utilisant la description de la vue. L'exemple de code est le suivant,
onView(withContentDescription("blah"))
Nous pouvons également transmettre l'ID de ressource de la valeur de texte au lieu du texte lui-même.
onView(withContentDescription(R.id.res_id_blah))
hasContentDescription ()
hasContentDescription () n'a pas d'argument. Il renvoie une correspondance, qui correspond à la vue qui a une description de contenu. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), hasContentDescription()))
withTagKey ()
withTagKey () accepte un argument de type string et l'argument fait référence à la clé de balise de la vue. Il renvoie un matcher, qui correspond à la vue en utilisant sa clé de balise. L'exemple de code est le suivant,
onView(withTagKey("blah"))
Nous pouvons également transmettre l'ID de ressource du nom de la balise au lieu du nom de la balise lui-même.
onView(withTagKey(R.id.res_id_blah))
withTagValue ()
withTagValue () accepte un argument de type Matcher <Object> et l'argument fait référence à la valeur de la balise de la vue. Il renvoie un matcher, qui correspond à la vue en utilisant sa valeur de balise. L'exemple de code est le suivant,
onView(withTagValue(is((Object) "blah")))
Ici, c'est Hamcrest matcher.
withClassName ()
withClassName () accepte un argument de type Matcher <String> et l'argument fait référence à la valeur du nom de classe de la vue. Il renvoie un matcher, qui correspond à la vue en utilisant son nom de classe. L'exemple de code est le suivant,
onView(withClassName(endsWith("EditText")))
Ici, se termine avec Hamcrest matcher et retourne Matcher <String>
withHint ()
withHint () accepte un argument de type Matcher <String> et l'argument fait référence à la valeur d'indication de la vue. Il renvoie une correspondance, qui correspond à la vue en utilisant l'indication de la vue. L'exemple de code est le suivant,
onView(withClassName(endsWith("Enter name")))
withInputType ()
withInputType () accepte un argument de type int et l'argument fait référence au type d'entrée de la vue. Il renvoie un matcher, qui correspond à la vue en utilisant son type d'entrée. L'exemple de code est le suivant,
onView(withInputType(TYPE_CLASS_DATETIME))
Ici, TYPE_CLASS_DATETIME fait référence aux dates et heures de prise en charge de la vue de modification.
withResourceName ()
withResourceName () accepte un argument de type Matcher <String> et l'argument fait référence à la valeur du nom de classe de la vue. Il renvoie un matcher, qui correspond à la vue en utilisant le nom de ressource de la vue. L'exemple de code est le suivant,
onView(withResourceName(endsWith("res_name")))
Il accepte également l'argument de chaîne. L'exemple de code est le suivant,
onView(withResourceName("my_res_name"))
avecAlpha ()
withAlpha () accepte un argument de type float et l'argument fait référence à la valeur alpha de la vue. Il renvoie une correspondance, qui correspond à la vue en utilisant la valeur alpha de la vue. L'exemple de code est le suivant,
onView(withAlpha(0.8))
withEffectiveVisibility ()
withEffectiveVisibility () accepte un argument de type ViewMatchers.Visibility et l'argument fait référence à la visibilité effective de la vue. Il renvoie une correspondance, qui correspond à la vue en utilisant la visibilité de la vue. L'exemple de code est le suivant,
onView(withEffectiveVisibility(withEffectiveVisibility.INVISIBLE))
withSpinnerText ()
withSpinnerText () accepte un argument de type Matcher <String> et l'argument fait référence à la valeur de la vue actuellement sélectionnée du Spinner. Il renvoie un matcher, qui correspond au spinner en fonction de la valeur toString de l'élément sélectionné. L'exemple de code est le suivant,
onView(withSpinnerText(endsWith("USA")))
Il accepte également l'argument de chaîne ou l'ID de ressource de la chaîne. L'exemple de code est le suivant,
onView(withResourceName("USA"))
onView(withResourceName(R.string.res_usa))
avecSubstring ()
withSubString () est similaire à withText () sauf qu'il permet de tester la sous-chaîne de la valeur de texte de la vue.
onView(withSubString("Hello"))
hasLinks ()
hasLinks () n'a pas d'arguments et renvoie un matcher, qui correspond à la vue ayant des liens. Il s'applique uniquement à TextView. L'exemple de code est le suivant,
onView(allOf(withSubString("Hello"), hasLinks()))
Ici, allOf est un matcher Hamcrest. allOf renvoie un matcher, qui correspond à tous les correspondants passés et ici, il est utilisé pour faire correspondre une vue et vérifier si la vue a des liens dans sa valeur de texte.
hasTextColor ()
hasTextColor () accepte un seul argument de type int et l'argument fait référence à l'ID de ressource de la couleur. Il renvoie un matcher, qui correspond à TextView en fonction de sa couleur. Il s'applique uniquement à TextView . L'exemple de code est le suivant,
onView(allOf(withSubString("Hello"), hasTextColor(R.color.Red)))
hasEllipsizedText ()
hasEllipsizedText () n'a pas d'argument. Il renvoie un matcher, qui correspond au TextView qui a un texte long et soit ellipsé (premier .. dix .. dernier) soit coupé (premier…). L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_text_view_id), hasEllipsizedText()))
hasMultilineText ()
hasMultilineText () n'a pas d'argument. Il renvoie un matcher, qui correspond au TextView contenant un texte sur plusieurs lignes. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_test_view_id), hasMultilineText()))
hasBackground ()
hasBackground () accepte un seul argument de type int et l'argument fait référence à l'ID de ressource de la ressource d'arrière-plan. Il renvoie un matcher, qui correspond à la vue en fonction de ses ressources d'arrière-plan. L'exemple de code est le suivant,
onView(allOf(withId("image"), hasBackground(R.drawable.your_drawable)))
hasErrorText ()
hasErrorText () accepte un argument de type Matcher <String> et l'argument fait référence à la valeur de la chaîne d'erreur de la vue (EditText). Il renvoie un matcher, qui correspond à la vue en utilisant la chaîne d'erreur de la vue. Cela s'applique uniquement à EditText . L'exemple de code est le suivant,
onView(allOf(withId(R.id.editText_name), hasErrorText(is("name is required"))))
Il accepte également l'argument de chaîne. L'exemple de code est le suivant,
onView(allOf(withId(R.id.editText_name), hasErrorText("name is required")))
hasImeAction ()
hasImeAction () accepte un argument de type Matcher <Integer> et l'argument fait référence aux méthodes d'entrée prises en charge par la vue (EditText). Il renvoie un matcher, qui correspond à la vue à l'aide de la méthode d'entrée prise en charge de la vue. Cela s'applique uniquement à EditText . L'exemple de code est le suivant,
onView(allOf(withId(R.id.editText_name),
hasImeAction(is(EditorInfo.IME_ACTION_GO))))
Ici, EditorInfo.IME_ACTION_GO est l'une des options des méthodes d'entrée. hasImeAction () accepte également l'argument entier. L'exemple de code est le suivant,
onView(allOf(withId(R.id.editText_name),
hasImeAction(EditorInfo.IME_ACTION_GO)))
supportsInputMethods ()
supportsInputMethods () n'a aucun argument. Il renvoie un matcher, qui correspond à la vue s'il prend en charge les méthodes d'entrée. L'exemple de code est le suivant,
onView(allOf(withId(R.id.editText_name), supportsInputMethods()))
isRoot ()
isRoot () n'a pas d'argument. Il renvoie un matcher, qui correspond à la vue racine. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_root_id), isRoot()))
est affiché()
isDisplayed () n'a pas d'argument. Il renvoie un matcher, qui correspond à la vue actuellement affichée. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), isDisplayed()))
isDisplayingAtLeast ()
isDisplayingAtLeast () accepte un seul argument de type int. Il renvoie une correspondance, qui correspond à la vue actuellement affichée au moins au pourcentage spécifié. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), isDisplayingAtLeast(75)))
isCompletelyDisplayed ()
isCompletelyDisplayed () n'a aucun argument. Il renvoie un matcher, qui correspond à la vue actuellement affichée complètement à l'écran. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), isCompletelyDisplayed()))
est autorisé()
isEnabled () n'a pas d'argument. Il renvoie un matcher, qui correspond à la vue activée. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), isEnabled()))
isFocusable ()
isFocusable () n'a aucun argument. Il renvoie un matcher, qui correspond à la vue qui a l'option de focus. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), isFocusable()))
hasFocus ()
hasFocus () n'a aucun argument. Il renvoie une correspondance, qui correspond à la vue actuellement focalisée. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), hasFocus()))
isClickable ()
isClickable () n'a pas d'argument. Il renvoie une correspondance, qui correspond à la vue qui est l'option de clic. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), isClickable()))
est sélectionné()
isSelected () n'a pas d'argument. Il renvoie une correspondance, qui correspond à la vue actuellement sélectionnée. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), isSelected()))
est vérifié()
isChecked () n'a pas d'argument. Il renvoie un matcher, qui correspond à la vue de type CompoundButton (ou sous-type de celui-ci) et est à l'état vérifié. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_view_id), isChecked()))
isNotChecked ()
isNotChecked () est juste en face de isChecked. L'exemple de code est le suivant *,
onView(allOf(withId(R.id.my_view_id), isNotChecked()))
isJavascriptEnabled ()
isJavascriptEnabled () n'a pas d'argument. Il renvoie un matcher, qui correspond à la WebView qui évalue JavaScript. L'exemple de code est le suivant,
onView(allOf(withId(R.id.my_webview_id), isJavascriptEnabled()))
avec un parent()
withParent () accepte un argument de type Matcher <View>. L'argument fait référence à une vue. Il renvoie une correspondance, qui correspond à la vue spécifiée comme vue parente. L'exemple de code est le suivant,
onView(allOf(withId(R.id.childView), withParent(withId(R.id.parentView))))
hasSibling ()
hasSibling () accepte un argument de type Matcher> View <. L'argument fait référence à une vue. Il retourne un matcher, qui correspond à la vue dont la vue transmise est l'une de ses vues sœurs. L'exemple de code est le suivant,
onView(hasSibling(withId(R.id.siblingView)))
avecEnfant ()
withChild () accepte un argument de type Matcher <View>. L'argument fait référence à une vue. Il renvoie un matcher, qui correspond à la vue transmise comme vue enfant. L'exemple de code est le suivant,
onView(allOf(withId(R.id.parentView), withChild(withId(R.id.childView))))
hasChildCount ()
hasChildCount () accepte un argument de type int. L'argument fait référence au nombre d'enfants d'une vue. Il renvoie un matcher, qui correspond à la vue qui a exactement le même nombre de vues enfants que celui spécifié dans l'argument. L'exemple de code est le suivant,
onView(hasChildCount(4))
hasMinimumChildCount ()
hasMinimumChildCount () accepte un argument de type int. L'argument fait référence au nombre d'enfants d'une vue. Il renvoie un matcher, qui correspond à la vue qui a au moins le nombre de vues enfants comme spécifié dans l'argument. L'exemple de code est le suivant,
onView(hasMinimumChildCount(4))
hasDescendant ()
hasDescendant () accepte un argument de type Matcher <View>. L'argument fait référence à une vue. Il renvoie une correspondance, qui correspond à la vue dont la vue transmise est l'une des vues descendantes dans la hiérarchie des vues. L'exemple de code est le suivant,
onView(hasDescendant(withId(R.id.descendantView)))
isDescendantOfA ()
isDescendantOfA () accepte un argument de type Matcher <View>. L'argument fait référence à une vue. Il renvoie un matcher, qui correspond à la vue dont la vue transmise est l'une des vues ancêtres dans la hiérarchie des vues. L'exemple de code est le suivant,
onView(allOf(withId(R.id.myView), isDescendantOfA(withId(R.id.parentView))))