Я хочу, чтобы текстовая строка отображалась в текстовом представлении в LinearLayout. может ли эспрессо сделать это? Если нет, есть ли другой способ сделать это или я могу использовать Android API в тестовом примере эспрессо? Я использую API 17 18 или новее, эспрессо 1.1 (он должен быть последним). Я понятия не имею об этом. Спасибо.
как получить текст из textview с помощью эспрессо
Ответы (2)
Основная идея состоит в том, чтобы использовать метод с внутренним ViewAction
, который извлекает текст в своем методе выполнения. Анонимные классы могут получить доступ только к конечным полям, поэтому мы не можем просто позволить ему установить локальную переменную 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
или ViewAction
, потому что только там гарантируется, что взаимодействие безопасно, так как оно запускается из потока пользовательского интерфейса, и перед выполнением проверяется, что никакие другие взаимодействия не вмешиваются.
getText(withId(viewId));
- person CROSP; 03.04.2017
Если вы хотите проверить текстовое значение другим текстом, вы можете создать 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");
}
};
}