使用 Espresso 单击 ListView 中的特定复选框

Click on a specific checkbox in a ListView using Espresso

我有一个 ListView,其中每一行都有一个复选框:

现在我想点击第 4 行的复选框。我有每一行的数据模型,所以我可以轻松地使用 onData() 到 select 给定数据的行。但是如何单击该行中的复选框?

经过一番研究,我发现了DataInteraction.atPosition() and DataInteraction.onChildView()。比如我可以做

onData(instanceOf(BaseballCard.class))
            .atPosition(4)
            .onChildView(withId(R.id.checkmark))
            .perform(click());

如果您的行布局允许点击行来设置复选框,您可以使用它来点击 ListView 行:

onData(anything()).atPosition(4).perform(click());

否则您可以在不知道其 ID 的情况下直接单击 CheckBox:

onData(anything())
   .atPosition(4)
   .onChildView(withClassName(Matchers.containsString("CheckBox")))
   .perform(click());

然后您可以断言 CheckBox 已被选中:

onData(anything())
   .atPosition(4)
   .onChildView(withClassName(Matchers.containsString("CheckBox")))
   .check(matches(isChecked()));

更多信息:https://github.com/shohrabuddin/Espresso


注意:要快速添加这些方法的导入,请将闪烁的光标放在未解析的方法上,然后执行 Android Studio ➔ 帮助Find Action ➔ 搜索 "show context action""show intention action" ➔ 点击结果选项 ➔ 弹出 window 会出现 ➔ 点击 "Import static method ...".您还可以为 "Show Context Actions" 分配键盘快捷键。 More info here。另一种方法是在设置中启用"Add unambiguous imports on the fly"