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?
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)
Kotlin:
var resources: Resources = InstrumentationRegistry.getInstrumentation().targetContext.resources
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