我有一个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。
解决我的测试用例的任何示例都很棒。
答案 0 :(得分:0)
是的,你应该使用onData语句来避免在GridView中滚动的问题。您可以在此处查看示例 - http://droidtestlab.com/adapterView.html
但在你的情况下,你将android.database.Cursor接口作为onData的参数。像这样的东西(在这里你指定你想在GridView中等待第一列相等的数据&#34; VALUE&#34;然后点击此记录):
onData(allOf(is(new BoundedMatcher<Object, Cursor>(Cursor.class) {
@Override
public void describeTo(Description description) {
}
@Override
protected boolean matchesSafely(Cursor cursor) {
return cursor.getString(0).equals("VALUE");
}
}))).inAdapterView(withId(<ADAPTER_ID>)).perform(click());