espresso之判断EditText是否为password

来源:互联网 发布:上海电信网络套餐 编辑:程序博客网 时间:2024/06/09 22:28

这一需求可能比较少见 , 但也是常见的 . 往往我们需要验证输入的密码是否屏蔽 , 这时怎么处理呢 ?
匹配是否为"********" ? 先不说是否正确 , 假设不是用 * 作为掩盖 , 而是用别的特殊字符呢? 再逐个匹配吗? 显然不尽现实 , code就是为了一劳永逸 .
这里先说说为什么不能匹配到"*******" , 因为就算用 * 作为了屏蔽 , 但 Text 的值依然是原来的字符 .
那么说说正确的方式吧 —– 自定义Matcher :

简单来说就是检查密码输入框的输入类型是否为PASSWORD

public static Matcher<View> isPassword(){        return new TypeSafeMatcher<View>() {            @Override            public void describeTo(Description description) {                description.appendText("is password .");            }            @Override            protected boolean matchesSafely(View view) {                if(!(view instanceof EditText))                    return false;                int inputType = ((EditText) view).getInputType();                return inputType == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) ||     //可预览的密码输入结构 即(129)                        inputType == InputType.TYPE_NUMBER_VARIATION_PASSWORD ||                        inputType == InputType.TYPE_TEXT_VARIATION_PASSWORD ||                        inputType == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD ||                        inputType == InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD;            }        };    }

结合自定义Matcher这篇文章相信不难看懂 . 这里列举了几种常用的密码输入类型 , 值得注意的是129这一类型 当前的APP 大多采用该类型 ( 输入时可预览 , 可用于显示明文 ) . 在code 中我有直接写明 129 的来源 即 InputType.TYPE_CLASS_TEXTInputType.TYPE_TEXT_VARIATION_PASSWORD 异或的结果 .

如此使用时:

.check(matches(isPassword())) 即可

0 0
原创粉丝点击