使用espresso选择列表视图中的特定复选框

时间:2018-01-09 03:26:46

标签: android listview checkbox android-espresso

我可以使用复选框的位置选择列表视图中的特定复选框。但是我想选中一个关于它旁边文本的复选框。 例如,存在具有复选框的杂货的列表视图,并且我想选择具有"牙膏的复选框"在它的旁边。我们如何做到这一点??

1 个答案:

答案 0 :(得分:3)

我的项目遇到了类似的问题(查看屏幕截图):

我创建了一个自定义匹配器,它匹配显示在其中的字符串的行列表(我只有一行带有TextView,一个ImageVIew和CheckBox)。

    private Matcher<View> isRoleChecked() {
    return new BoundedMatcher<View, TextView>(TextView.class) {
        @Override
        public void describeTo(Description description) {
            description.appendText("a whatever description");
        }

        @Override
        protected boolean matchesSafely(TextView view) {
            ConstraintLayout constraintLayout = (ConstraintLayout) view.getParent();

            CheckBox aCheck = constraintLayout.findViewById(R.id.myCheckbox);

            return aCheck.isChecked();
        }
    };
}

魔术发生在matchesSafely(TextView view)方法中,您可以“捕捉”复选框所在的布局。之后,您可以使用复选框执行任何操作。您可以将其设置为选中 - &gt; aCheck.setChecked(true);但从自动化测试的角度来看,这不是一个好的选择,因为你想要执行点击。 如果是这样,您可以使用:

onView(withText("class number 0")).check(matches(isRoleChecked())).perform(click());

显然,您需要根据需要重新编写代码。希望这会有所帮助。