Android Espresso - 如果未选中,请单击复选框

标签 android testing checkbox android-espresso

我有 onView(withId(R.id.check_box)).perform(click()),但我只想在尚未选中复选框时执行此操作。我怎样才能在 Espresso 中做到这一点?

最佳答案

我还想根据之前的状态切换复选框/开关。起初,我试过这个来打开一个关闭的复选框:

onView(withId(R.id.checkbox)).check(matches(isNotChecked())).perform(scrollTo(), click());

...这将关闭一个打开的复选框:

onView(withId(R.id.checkbox)).check(matches(isChecked())).perform(scrollTo(), click());

但是,这不起作用,因为 Espresso 会在执行操作之前寻找特定的切换状态。有时,您事先并不知道它是打开还是关闭。

我的解决方案是使用自定义 ViewAction 来关闭/打开任何不依赖于先前状态的可检查对象(开关、复选框等)。所以,如果它已经打开,它将保持打开状态。如果它关闭,它将打开。这是 ViewAction:

public static ViewAction setChecked(final boolean checked) {
    return new ViewAction() {
        @Override
        public BaseMatcher<View> getConstraints() {
            return new BaseMatcher<View>() {
                @Override
                public boolean matches(Object item) {
                    return isA(Checkable.class).matches(item);
                }

                @Override
                public void describeMismatch(Object item, Description mismatchDescription) {}

                @Override
                public void describeTo(Description description) {}
            };
        }

        @Override
        public String getDescription() {
            return null;
        }

        @Override
        public void perform(UiController uiController, View view) {
            Checkable checkableView = (Checkable) view;
            checkableView.setChecked(checked);
        }
    };
}

下面是你如何使用它(在这个例子中,当你想切换到 ON 时):

onView(withId(R.id.toggle)).perform(scrollTo(), setChecked(true));

关于Android Espresso - 如果未选中,请单击复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37819278/

相关文章:

unit-testing - 断言消息 : assume failure, 或假定成功

javascript - 复选框组选择的动态限制

javascript - 返回单击时选中的所有复选框的数组

android - 在android中获取imageview内的触摸位置

javascript - 对于文件选择器 openFileChooser() 方法不调用 Kitkat 4.4 的 WebChromeClient

java - 如何准确测量 drawTextOnPath() 在 Canvas 上绘制的文本的像素大小

javascript - jQuery,无法选中复选框

java - Android中如何全局访问SQl​​ite返回的数据?

python - 将测试标记为从 pytest 中的 fixture 内部通过

java - 如何使用 PowerMock 测试从同一类调用另一个私有(private) void 方法的方法?