2016-02-16 40 views
0

我有一個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嘗試。

任何解決我的測試案例的例子都會很棒。

回答

0

是的,你應該使用onData語句來避免在GridView中滾動的問題。你可以看看這裏的例子 - http://droidtestlab.com/adapterView.html

但在你的情況下,你會有android.database.Cursor接口作爲onData的參數。像這樣的東西(這裏您指定要等待GridView中第一列等於「VALUE」的數據,然後單擊此記錄):

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()); 
相關問題