Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在浓缩咖啡中关注页面元素?_Android_Android Espresso_Hamcrest - Fatal编程技术网

Android 如何在浓缩咖啡中关注页面元素?

Android 如何在浓缩咖啡中关注页面元素?,android,android-espresso,hamcrest,Android,Android Espresso,Hamcrest,我正在尝试使用以下方法选中/取消选中浓缩咖啡测试中的复选框: termsAndConditionsCheckbox.check(matches(isChecked())); termsAndConditionsCheckbox.perform(scrollTo()).perform(click()); termsAndConditionsCheckbox.check(matches(isNotChecked())); 但是得到错误: Error performing 'scroll to

我正在尝试使用以下方法选中/取消选中浓缩咖啡测试中的复选框:

 termsAndConditionsCheckbox.check(matches(isChecked()));
 termsAndConditionsCheckbox.perform(scrollTo()).perform(click());
 termsAndConditionsCheckbox.check(matches(isNotChecked()));
但是得到错误:

Error performing 'scroll to' on view
Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints:
          (view has effective visibility=VISIBLE and is descendant of a: (is assignable from class: class android.widget.ScrollView or is assignable from class: class android.widget.HorizontalScrollView))
          Target view: "AppCompatCheckBox{id=2131689839, res-name=tnc_checkbox, visibility=VISIBLE, width=96, height=96, has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, is-focusable=true, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-conn

已尝试删除scrollTo并仅使用click()。但仍无法执行单击。

出现的错误消息指出,
复选框必须是可见的,并且是
滚动视图
水平滚动视图
的子项。您的
复选框
确实可见
,但不是
滚动视图
的子项。因此,如果您有如下布局:

<LinearLayout ...>
    <TextView android:id="@+id/lbl_license_text" ... />
    <CheckBox android:id="@+id/chk_accept" ... />
</LinearLayout>
(显然用该元素的
android:
属性替换
..
的实例)


这将允许Espresso在运行测试时向下滚动到
复选框。

我可以通过实现自定义ViewAction功能来解决此问题(在stackoverflow的一个答案中看到)


取消选中并传递true以选中复选框。

滚动视图中的
复选框
?否,但我尝试了几个选项,如scrollTo()
scrollTo()
期望目标元素是
滚动视图
的子元素,因此,如果您的视图太大,无法显示在屏幕上,则需要将其包装在布局XML中的
滚动视图中。我很快就会写出完整的答案。
<ScrollView ...>
    <LinearLayout ...>
        <TextView android:id="@+id/lbl_license_text" ... />
        <CheckBox android:id="@+id/chk_accept" ... />
    </LinearLayout>
</ScrollView>
 public static ViewAction setChecked(final boolean checked) {
    return new ViewAction() {
        @Override
        public Matcher<View> getConstraints() {
            return new Matcher<View>() {
                @Override
                public boolean matches(Object item) {
                    return isA(Checkable.class).matches(item);
                }

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

                @Override
                public void _dont_implement_Matcher___instead_extend_BaseMatcher_() {}

                @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);
        }
    };
}
termsAndConditionsCheckbox.perform(Helper.setChecked(false));