Android Espresso - 在屏幕上根据资源中的字符串断言文本

时间:2016-09-12 15:34:57

标签: android android-espresso

我在strings.xml资源文件中有以下文字:

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

通常在应用程序代码中,要使用此文本并在屏幕上显示,我要执行以下操作:

getString(R.string.main_ent_mil_new_mileage);

目前,我尝试在使用Espresso编写的UI测试中使用此字符串资源。我想做类似的事情:

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编写的测试中使用它?

4 个答案:

答案 0 :(得分:47)

使用此功能:

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

您只需使用字符串的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()));

*新Espresso版的编辑:

使用新版Espresso,您应该可以使用 ViewMatcher 直接调用字符串资源。首先,我建议直接尝试此导入

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

然后在代码中:

withText(R.string.my_string_resource)

答案 1 :(得分:1)

androidx.test.platform.app.InstrumentationRegistry已弃用androidx.test.core.app.ApplicationProvider

val targetContext: Context = ApplicationProvider.getApplicationContext()
val test: String =  targetContext.getResources().getString(R.string. my_text_on_screen)

答案 2 :(得分:0)

如果必须在String资源之前添加文本,则必须这样做

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

现在您有权访问文本,将字符串附加到该文本

答案 3 :(得分:0)

科特琳:

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