我有一个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。
感谢任何帮助。谢谢!
答案 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
字段,您可以检查其与模式的相等性。
我希望我能给你一些想法,他们会帮助你。