8

Я пытаюсь протестировать динамически генерируемый Spinner. Я могу нажать на spinner, но затем мне нужно выбрать опцию из списка с указанным текстом, который отображается (я узнал из hierarchyviewer, что отображается PopupWindow, но я не могу получить требуемый текст, который находится вне экрана) , Вертушка использует ArrayAdapter пользовательских объектов (код ниже),Эспрессо-динамическое тестирование счетчика

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner); 
     List<MyValue> list = Arrays.asList(
       new MyValue("One", "1"), 
       new MyValue("Two", "2"), 
       new MyValue("Three", "3"), 
       new MyValue("Four", "4"), 
       new MyValue("Five", "5"), 
       new MyValue("Six", "6"), 
       new MyValue("Seven", "7"), 
       new MyValue("Eight", "8"), 
       new MyValue("Nine", "9"), 
       new MyValue("Ten", "10"), 
       new MyValue("Eleven", "11"), 
       new MyValue("Twelve", "12"), 
       new MyValue("Thirteen", "13"), 
       new MyValue("Fourteen", "14"), 
       new MyValue("Fifteen", "15"), 
       new MyValue("Sixteen", "16"), 
       new MyValue("Seventeen", "17"), 
       new MyValue("Eighteen", "18"), 
       new MyValue("Nineteen", "19"), 
       new MyValue("Twenty", "20"), 
       new MyValue("Twenty One", "21") 
     ); 

     final ArrayAdapter<MyValue> adapter = new ArrayAdapter<>(this, 
       R.layout.dropdown_selected_item, 
       list); 
     mySpinner.setAdapter(adapter); 
     mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       Log.d("MySpinnerTest", "current = " + adapter.getItem(position)); 
      } 
      @Override 
      public void onNothingSelected(AdapterView<?> parent) {} 
     }); 
    } 

    public class MyValue { 
     String name; 
     String code; 

     public MyValue(String name, String code) { 
      this.name = name; 
      this.code = code; 
     } 

     @Override 
     public String toString() { 
      return name; 
     } 
    } 
} 

Я попытался с onData(withSpinnerText("Twenty")).perform(click()) но получить PerformException и я пытался выяснить, как еще соответствовать правильный вид, основанный на данном тексте, в блесны popupwindow, но не мог понять, как это сделать.

Любая помощь была бы принята с благодарностью.

ТИА

+0

Можно ли подключить выполнение исключения, которое вы видите, и с помощью соединителя SpinnerText? –

ответ

4

Найден способ сделать это и так проводкой ответ мой собственный вопрос.

я должен был создать пользовательский Искателя для моего объекта, а затем использовать его с onData()

public static Matcher<Object> withMyValue(final String expectedName) { 
    return new BoundedMatcher<Object, MyValue>(MyValue.class) { 

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

     @Override 
     protected boolean matchesSafely(MyValue myValue) { 
      return myValue.getName().equalsIgnoreCase(expectedName); 
     } 
    }; 
} 

, который затем может быть использован в качестве (после нажатия на блесны, чтобы отобразить ниспадающее меню)

onData(withMyValue(field.name)).perform(click());

0

кажется ваш Spinner не имеет вид раскрывающийся перед mySpinner.setAdapter(adapter);

Пожалуйста, добавьте эту строку:

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
Смежные вопросы