我想在 LinearLayout 的 TextView 中显示文本字符串。浓缩咖啡可以吗?如果没有,有没有其他方法可以做到这一点,或者我可以在 espresso 测试用例中使用 android api 吗?我正在使用 API 17 18 或更新版本的 espresso 1.1(应该是最新的。)。我对此一无所知。谢谢。
最佳答案
基本思想是使用带有内部 ViewAction
的方法。在它的 perform 方法中检索文本。匿名类只能访问 final 字段,所以我们不能让它设置一个局部变量 getText()
,而是使用 String 数组从 ViewAction
中取出字符串。 .
String getText(final Matcher<View> matcher) {
final String[] stringHolder = { null };
onView(matcher).perform(new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(TextView.class);
}
@Override
public String getDescription() {
return "getting text from a TextView";
}
@Override
public void perform(UiController uiController, View view) {
TextView tv = (TextView)view; //Save, because of check in getConstraints()
stringHolder[0] = tv.getText().toString();
}
});
return stringHolder[0];
}
注:应谨慎使用此类 View 数据检索器。如果您经常发现自己在编写这种方法,那么您很有可能从一开始就做错了。也永远不要访问 ViewAssertion
之外的 View 或 ViewAction
,因为只有在那里才能确保交互是安全的,因为它是从 UI 线程运行的,并且在执行之前经过检查,没有其他交互干预。
关于automated-tests - 如何使用espresso从textview中获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23381459/