I have the following text in strings.xml resources file:
<string name="txt_to_assert">My Text</string>
Normally in a application code, to use this text and display it on screen, I'm doing the following:
getString(R.string.main_ent_mil_new_mileage);
At the moment, I'm trying to use this string resource in a UI test written with Espresso. I'm thinking of doing something like that:
String myTextFromResources = getString(R.string.main_ent_mil_new_mileage);
onView(allOf(withId(R.id.my_text_on_screen), withText(myTextFromResources))
.check(matches(isDisplayed()));
However, getString(...)
method cannot be used here.
Is there a way to get a text from strings.xml resource file and use it in a test written with Espresso?
Use this function:
private String getResourceString(int id) {
Context targetContext = InstrumentationRegistry.getTargetContext();
return targetContext.getResources().getString(id);
}
You just have to call it with the id of the string and perform your 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 for new Espresso version:
With new version of Espresso, you should be able to call directly the string resource with a ViewMatcher. So first, I recommend to try directly this import
import static android.support.test.espresso.matcher.ViewMatchers.withText;
And then in the code:
withText(R.string.my_string_resource)