我们可以对Edittext Value执行断言,并根据它的输出记下我们的测试用例。就像我们的Edittext值等于我们的值一样,我们想要执行条件A否则B。
onView(withId(viewId)).check(matches(isEditTextValueEqualTo(viewId, value)));
Matcher<View> isEditTextValueEqualTo(final int viewId, final String content) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Match Edit Text Value with View ID Value : : " + content);
}
@Override
public boolean matchesSafely(View view) {
if (view != null) {
String editTextValue = ((EditText) view.findViewById(viewId)).getText().toString();
if (editTextValue.equalsIgnoreCase(content)) {
return true;
}
}
return false;
}
};
}
这不能使用try .. Catch(Exception e)
答案 0 :(得分:4)
我认为你不应该在匹配器里面做一个findViewById,我认为没有理由这样做。
我已更新您的匹配器:
Matcher<View> isEditTextValueEqualTo(final String content) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Match Edit Text Value with View ID Value : : " + content);
}
@Override
public boolean matchesSafely(View view) {
if (!(view instanceof TextView) && !(view instanceof EditText)) {
return false;
}
if (view != null) {
String text;
if (view instanceof TextView) {
text =((TextView) view).getText().toString();
} else {
text =((EditText) view).getText().toString();
}
return (text.equalsIgnoreCase(content));
}
return false;
}
};
}
并以这种方式称呼它:
onView(withId(viewId)).check(matches(isEditTextValueEqualTo(value)));
答案 1 :(得分:0)
当我检查值并且断言失败时,它会抛出AssertionFailedError,它不在Exception的层次结构中。它通过try ... catch(AssertionFailedError e)
得到修复