使用Espresso在微调器中选择关闭屏幕项目

时间:2016-05-11 12:39:35

标签: android android-espresso

我有一个Spinner有20个项目。如果用户点击微调器时屏幕上显示item,则以下代码有效。

onData(allOf(is(instanceOf(SpinnerItem.class)), is(item))).perform(click());

对于需要滚动的item,测试将遇到以下异常:

android.support.test.espresso.PerformException: Error performing 'single click - At Coordinates: 719, -243 and precision: 16, 16' on view ' displaying data matching: (is an instance of SpinnerItem and is <Text>) within adapter view matching: is assignable from class: class android.widget.AdapterView'.
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83)
...

你可以清楚地看到y位置是-243,因此无法执行点击。我尝试添加perform(scrollTo(), click()),但它抱怨scrollTo无法使用onData。

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我也有一个大的微调器和滚动工作正常。我的代码如下:

onData(allOf(is(instanceOf(String.class)), containsString("5.1.3"))).perform(click());

使用espresso 2.2.2:

com.android.support.test.espresso:espresso-core:2.2.2

唯一的区别是我在我的适配器中使用String而不是自定义类。 也许您应该尝试从SpinnerItem切换到String只是为了查看此错误是否会消失?

is(SpinnerItem)也可能出现问题。您可以尝试为SpinnerItem编写自己的Matcher,如下所示:

public static Matcher<Object> withContent(final String content) {
    return new BoundedMatcher<Object, SpinnerItem>(SpinnerItem.class) {
        @Override
        public boolean matchesSafely(SpinnerItem myObj) {
            return myObj.content == content;
        }

        @Override
        public void describeTo(Description description) {
            description.appendText("with content '" + content + "'");
        }
    };
}

并使用:

onData(withContent("5.")).inAdapterView(withId(R.id.contents_theory_listview)).perform(click());

此示例假设您的项目中有content字段,您可以检查其与模式的相等性。

我希望我能给你一些想法,他们会帮助你。