2016-05-11 1 views
1

У меня есть Spinner с 20 элементами. Приведенный ниже код работает, если на экране отобразится item, когда пользователь нажимает на счетчик.Выбор элемента с экрана в счетчике с помощью эспрессо

onData(allOf(is(instanceOf(SpinnerItem.class)), is(item))).perform(click()); 

Для item, которые требующих прокрутки, тест ударил ниже исключение:

android.support.test.espresso.PerformException: Error performing 'single click - At Coordinates: 719, -243 and precision: 16, 16' on view ' displaying data matching: (is an instance of SpinnerItem and is <Text>) within adapter view matching: is assignable from class: class android.widget.AdapterView'. 
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83) 
... 

вы можете ясно видеть, что у-позиция на -243, и поэтому он не может выполнить щелчок. Я попытался добавить perform(scrollTo(), click()), но он жалуется, что scrollTo не работает с onData.

Цените для любой помощи. Благодаря!

ответ

0

У меня также есть большой счетчик и прокрутка. Мой код выглядит следующим образом:

onData(allOf(is(instanceOf(String.class)), containsString("5.1.3"))).perform(click()); 

Использование эспрессо 2.2.2:

com.android.support.test.espresso:espresso-core:2.2.2 

Единственное отличие состоит в том, что я использую строку в мой адаптер вместо пользовательского класса. Возможно, вам стоит попробовать переключиться с SpinnerItem на номер String, просто чтобы посмотреть, будет ли эта ошибка упущена или нет?

Также проблема может быть в is(SpinnerItem). Вы можете попробовать написать собственный Искателя для SpinnerItems, как это:

public static Matcher<Object> withContent(final String content) { 
    return new BoundedMatcher<Object, SpinnerItem>(SpinnerItem.class) { 
     @Override 
     public boolean matchesSafely(SpinnerItem myObj) { 
      return myObj.content == content; 
     } 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("with content '" + content + "'"); 
     } 
    }; 
} 

и использование:

onData(withContent("5.")).inAdapterView(withId(R.id.contents_theory_listview)).perform(click()); 

В этом примере предположим, у вас есть content поле в пункте, и вы можете проверить его равенство с шаблон.

Надеюсь, я дал вам некоторые идеи, и они помогут вам.