Espresso:测试TextInputLayout PasswordVisibilityToggle按钮

时间:2019-03-12 18:50:19

标签: android unit-testing android-espresso

美好的一天,您将开始使用浓缩咖啡,并尝试检查TextInputLayout的PasswordVisibilityToggleEnabled按钮是否可见。我知道此按钮是ID为{R.id.text_input_password_toggle)的CheckableImageButton,但不确定如何在Espresso中获取它。

我尝试这样做:

onView(withId(R.id.passwordTextInputLayout)).check(hasDescendant(withId(R.id.text_input_password_toggle))).check(matches(not(isDisplayed())));

但这不起作用。我猜想我可能不得不根据StackOverflow上的一些问题使用自定义Matcher,但不确定是否正确执行了该操作。

public static Matcher<View> getPasswordToggleView(final Matcher<View> parentMatcher, int id) {
    return new TypeSafeMatcher<View>() {
        @Override
        protected boolean matchesSafely(View view) {
            if(!(view.getParent() instanceof ViewGroup)) {
                return parentMatcher.matches(view.getParent());
            }

            ViewGroup group = (ViewGroup) view.getParent();
            return  parentMatcher.matches(view.getParent()) && view.getId() == id;
        }

        @Override
        public void describeTo(Description description) {
            description.appendText("get View with matching id");
        }
    };
}

并尝试像这样使用它,但仍然无法正常工作:

 onView(getPasswordToggleView(withId(R.id.passwordTextInputLayout), R.id.text_input_password_toggle)).check(matches(not(isDisplayed())));

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

只要(显然)已经使用切换按钮的ID,您就可以执行onView(withId(R.id.text_input_password_toggle)).check(doesNotExist())来检查切换按钮是否未显示。如果passwordToggleEnabled为假,则此验证将成功。

doesNotExistandroid.support.test.espresso.assertion

的一部分