espresso动态旋转器测试



我正在尝试测试一个动态生成的Spinner。我可以点击微调器,但我需要从列表中选择一个显示给定文本的选项(我从层次视图中发现显示了一个弹出窗口,但无法访问屏幕外所需的文本)。微调器使用自定义对象的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,我试图在微调器popwindow中找到如何根据给定文本匹配正确的视图,但不知道如何做到这一点。

如有任何帮助,我们将不胜感激。

TIA

找到了一种方法,因此发布了我自己问题的答案。

我必须为我的对象创建一个自定义匹配器,然后将其用于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());

mySpinner.setAdapter(adapter); 之前,您的Spinner似乎没有下拉视图

请添加此行:

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

最新更新