我有一个GridView加载数据,并且网格中的一些项目是包含不同数据集的“组”项目 。如果有大量数据,GridView可以滚动。Android Espresso GridView滚动到每个项目并执行点击它们
在某些设备上,GridView有三列,其他设备上只有两列,具体取决于设备的屏幕宽度。
我需要测试的是滚动到网格中的特定(与文本)项目,打开它,然后关闭它(后退按钮= simpleClick)。然后滚动到具有特定文本的第二项并打开然后关闭它(返回按钮= simpleClick)。
我曾尝试几种方法与刷卡,然后进行点击 他们,但你需要知道 挥笔/滚动到底有多少执行之前,我可以点击打开该项目组这种方法失败 - 特定设备这是不好的。同时执行太多的滚动比达到屏幕底部所需要的滚动数似乎会放慢测试!!挺好!一点点。
private void scrollDown() {
Log.d(TAG, "scrollDown: ");
onView(withId(R.id.main_grid))
.perform(swipeUp());
}
private void scrollUp() {
Log.d(TAG, "scrollUp: ");
onView(withId(R.id.main_grid))
.perform(swipeDown());
}
private void clickOn(final String text) {
onView(withText(new Matcher<String>() {
@Override
public boolean matches(Object item) {
if (item instanceof String) {
if (((String) item).contains(text))
return true;
else
return false;
}
return false;
}
@Override
public void describeMismatch(Object item, Description mismatchDescription) {
}
@Override
public void _dont_implement_Matcher___instead_extend_BaseMatcher_() {
}
@Override
public void describeTo(Description description) {
}
}))
.perform(click());
}
我已经尝试了这个为好,但焦点被设置为每个项目 但是,当它到达屏幕的结束,需要手动 滚动设备上 - 它不滚动屏幕。
for (int i = 0 ; i < 20; i++) {
onData(anything())
.inAdapterView(allOf(withId(R.id.main_grid), isDisplayed()))
.atPosition(i)
.check(matches(isDisplayed()));
}
我也使用了昂达我不能获得成功(编译/编译), 因为我使用的是CursorLoader和ResourceCursorAdapter尝试。
任何解决我的测试案例的例子都会很棒。