我想要在 LinearLayout 的 textview 中显示文本字符串。浓缩咖啡能做到吗?如果没有,是否有其他方法可以做到这一点,或者我可以在 espresso 测试用例中使用 android api 吗?我正在使用 API 17 18 或更新的 espresso 1.1(它应该是最新的。)。我对此一无所知。谢谢。
问问题
24571 次
2 回答
53
基本思想是使用具有内部的方法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];
}
注意:这种视图数据检索器应谨慎使用。如果你经常发现自己在编写这种方法,那么很有可能你从一开始就做错了什么。也永远不要在ViewAssertion
or之外访问视图ViewAction
,因为只有在那里才能确保交互是安全的,因为它是从 UI 线程运行的,并且在执行之前检查它,没有其他交互干预。
于 2014-05-05T08:01:07.957 回答
7
如果你想用另一个文本检查文本值,你可以创建 Matcher。您可以查看我的代码来创建自己的方法:
public static Matcher<View> checkConversion(final float value){
return new TypeSafeMatcher<View>() {
@Override
protected boolean matchesSafely(View item) {
if(!(item instanceof TextView)) return false;
float convertedValue = Float.valueOf(((TextView) item).getText().toString());
float delta = Math.abs(convertedValue - value);
return delta < 0.005f;
}
@Override
public void describeTo(Description description) {
description.appendText("Value expected is wrong");
}
};
}
于 2016-01-05T08:24:29.293 回答