Android Espresso - утверждение текста на экране против строки в ресурсах
У меня есть следующий текст в файле ресурсов strings.xml:
<string name="txt_to_assert">My Text</string>
Обычно в коде приложения, чтобы использовать этот текст и отображать его на экране, я делаю следующее:
getString(R.string.main_ent_mil_new_mileage);
В настоящий момент я пытаюсь использовать этот строковый ресурс в тесте UI, написанном с помощью Espresso. Я собираюсь сделать что-то подобное:
String myTextFromResources = getString(R.string.main_ent_mil_new_mileage);
onView(allOf(withId(R.id.my_text_on_screen), withText(myTextFromResources))
.check(matches(isDisplayed()));
Однако метод getString(...)
не может быть использован здесь.
Есть ли способ получить текст из файла ресурсов strings.xml и использовать его в тесте, написанном с помощью Espresso?
Ответы
Ответ 1
Используйте эту функцию:
private String getResourceString(int id) {
Context targetContext = InstrumentationRegistry.getTargetContext();
return targetContext.getResources().getString(id);
}
Вам просто нужно вызвать его с идентификатором строки и выполнить свое действие:
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 для новой версии Espresso:
С новой версией Espresso вы должны иметь возможность напрямую ссылаться на строковый ресурс с помощью ViewMatcher. Поэтому сначала я рекомендую попробовать непосредственно этот импорт
import static android.support.test.espresso.matcher.ViewMatchers.withText;
И затем в коде:
withText(R.string.my_string_resource)
Ответ 2
Если в случае, если вам нужно добавить текст перед ресурсом String, вам придется сделать это следующим образом
val text=getApplicationContext<Context().getResources().getString(R.string.title_tenth_char)
теперь, когда у вас есть доступ к тексту, добавьте строку к этому
Ответ 3
Котлин:
var resources: Resources = InstrumentationRegistry.getInstrumentation().targetContext.resources