2014-02-06 6 views
1

Я пытаюсь реализовать это с помощью Google's Espresso, однако я не нахожу ViewAssertion или ViewAction, что позволило бы мне это сделать ,Проверьте, есть ли у ListView определенное количество элементов и прокручивается до последнего с помощью Espresso

Я не уверен, что это можно сделать с помощью комплекта в матчи, или я должен написать свой собственный.

Спасибо!

ответ

5

Несмотря на то, что ответ @denys кажется на первый взгляд правильным, похоже, что он работает только в определенных случаях (как предложено Espresso author). Правильный способ для прокрутки к конкретному пункту, как ответил здесь на android-test-kit-discuss форуме, и приводится ниже:

onData(instanceOf(Item.class)) 
      .inAdapterView(allOf(withId(android.R.id.list), isDisplayed())) 
      .atPosition(9) 
      .check(matches(isDisplayed())); 
0

Если у вас уже есть этот конкретный номер, то вы должны сделать что-то вроде этого:

onData(is(instanceOf(yourClass.class))) 
    .inAdapterView(withId(R.id.some_list_view)) 
    .atPosition(spicificNumber) 
    .perform(scrollTo()); 

Это подведет, если ListView не имеет элемент в положении с specificNumber.

Редакцией:

Посмотрите также на этом примере - Espresso samples. Это поможет вам проверить, нет ли больше элементов в списке после spesificNumber.

+0

кажется 'atPosition (specificNumber)' тянет макет элемента строки, поэтому он пытается выполнить действие там, а в списке. Я посмотрю на ссылку, которую вы отправили. Пока что это единственный способ добиться этого, это написать пользовательский «Matcher». Благодаря! –

+0

В вашей теме вы хотите перейти к последнему элементу в списке - мой код выше представляет собой один и только один способ сделать это. Другого варианта нет. – denys

+0

, если вы не хотите использовать прокрутку вниз для прокрутки до нижней части списка. но это не соответствует вашему вопросу. – denys

1

Это может выглядеть примерно так:

1. Найти количество элементов в ListView и сохранить его в некоторой переменной:

final int[] counts = new int[1]; 
    onView(withId(R.id.some_list_view)).check(matches(new TypeSafeMatcher<View>() { 
     @Override 
     public boolean matchesSafely(View view) { 
      ListView listView = (ListView) view; 

      counts[0] = listView.getCount(); 

      return true; 
     } 

     @Override 
     public void describeTo(Description description) { 

     } 
    })); 

2. Затем, зная количество элементов в ListView вы можете прокручивать к любому элементу в пределах диапазона.

onData(anything()).inAdapterView(R.id.some_list_view).getPosition(<item_index>).perform(scrollTo())