динамическое тестирование счетчика эспрессо

Я пытаюсь протестировать динамически сгенерированный Spinner. Я могу щелкнуть счетчик, но затем мне нужно выбрать параметр из списка с заданным текстом, который отображается (я узнал из иерархии, что показывается 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, и я попытался выяснить, как еще сопоставить правильное представление на основе заданного текста во всплывающем окне счетчика, но не смог понять, как это сделать.

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

ТИА


person Bootstrapper    schedule 31.10.2015    source источник
comment
Можно ли прикрепить исключение выполнения, которое вы видите, и сопоставитель SpinnerText?   -  person Be_Negative    schedule 08.11.2015


Ответы (2)


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

Мне пришлось создать собственное сопоставление для моего объекта, а затем использовать его с 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());

person Bootstrapper    schedule 21.11.2015

Кажется, у вашего Spinner нет раскрывающегося списка до mySpinner.setAdapter(adapter);

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

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
person Mulham Raee    schedule 12.11.2015