web-dev-qa-db-fra.com

Android Espresso - affirmer le texte à l'écran contre la chaîne dans les ressources

J'ai le texte suivant dans le fichier de ressources strings.xml:

<string name="txt_to_assert">My Text</string>

Normalement, dans un code d'application, pour utiliser ce texte et l'afficher à l'écran, je fais ce qui suit:

getString(R.string.main_ent_mil_new_mileage);

En ce moment, j'essaie d'utiliser cette ressource de chaîne dans un test d'interface utilisateur écrit avec Espresso. Je pense à faire quelque chose comme ça:

String myTextFromResources = getString(R.string.main_ent_mil_new_mileage);
onView(allOf(withId(R.id.my_text_on_screen), withText(myTextFromResources))
    .check(matches(isDisplayed()));

Cependant, la méthode getString(...) ne peut pas être utilisée ici.
Existe-t-il un moyen d'obtenir un texte du fichier de ressources strings.xml et de l'utiliser dans un test écrit avec Espresso?

22
klimos

Utilisez cette fonction:

private String getResourceString(int id) {
    Context targetContext = InstrumentationRegistry.getTargetContext();
    return targetContext.getResources().getString(id);
}

Il vous suffit de l'appeler avec l'ID de la chaîne et d'effectuer votre action:

String myTextFromResources = getResourceString(R.string.main_ent_mil_new_mileage);
onView(allOf(withId(R.id.my_text_on_screen), withText(myTextFromResources))
    .check(matches(isDisplayed()));

* EDIT pour la nouvelle version Espresso:

Avec la nouvelle version d'Espresso, vous devriez pouvoir appeler directement la ressource de chaîne avec un ViewMatcher . Donc tout d'abord, je recommande d'essayer directement cette importation

import static Android.support.test.espresso.matcher.ViewMatchers.withText;

Et puis dans le code:

withText(R.string.my_string_resource)
52
adalPaRi

Kotlin:

var resources: Resources = InstrumentationRegistry.getInstrumentation().targetContext.resources
0
PSK

Si au cas où vous devez ajouter un texte avant la ressource String, vous devrez le faire comme ceci

val text=getApplicationContext<Context().getResources().getString(R.string.title_tenth_char) 

maintenant que vous avez accès au texte, ajoutez la chaîne à celle

0
war_Hero