Android UI unit-tests: 如何找到动态添加的复选框?

Android UI unit-tests: how to find dynamically added checkbox?

在我的 android 应用程序中,我有一个 ListView 自定义项目(由一个可点击的标题 + 一个没有文本的复选框组成)。这些项目是动态添加的。

如何使用 Espresso 或类似框架在我的单元测试中选中这些复选框之一?

我找不到如何获取对其中一个复选框的引用。由于它们是动态添加的,我无法通过 id 找到它们,就像我通常使用静态 .xml views.

您需要以编程方式设置复选框的 ID(请参阅此 answer and this)。

    int checkBoxId = 200000; // global variable to count checkboxes
    for (int i = 0; i < 1000; ++i) {
        CheckBox box = new CheckBox(this);
        box.setId(++checkBoxId);
    }

然后像往常一样找到它们:

onView(withId(200003)).perform(click());

以下是我们在不更改应用程序代码的情况下的做法:

int indexOfItem = 1;
onData(anything()).inAdapterView(withId(R.id.listView))
            .atPosition(indexOfItem)
            .onChildView(withId(R.id.checkBox))
            .perform(click());