在Espresso中断言EditText值

时间:2016-07-26 10:10:05

标签: android android-espresso

我们可以对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)

2 个答案:

答案 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)

得到修复