我有一個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嘗試。
任何解決我的測試案例的例子都會很棒。