【发布时间】:2016-02-16 12:42:19
【问题描述】:
我有一个加载数据的 GridView,网格中的一些项目是“组”项目 包含一组不同的数据。如果有 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()));
}
我也尝试过使用我无法成功的 onData(编译/构建), 因为我正在使用 CursorLoader 和 ResourceCursorAdapter。
解决我的测试用例的任何示例都会很棒。
【问题讨论】:
标签: android gridview android-espresso