无法使用 Espresso Ui 测试 (Android) 单击 SwitchPreference

Unable to click on SwitchPreference with Espresso Ui Test (Android)

我有一个 SwitchPreference (PreferenceFragmentCompat),想点击切换按钮。但是我做不到。

这是我的代码:

@Test
fun settings_testSwitch() {
    pressAudioOnlyToggle()
}
fun pressAudioOnlyToggle() {
    onData(allOf(`is`(instanceOf(Preference::class.java)), withText(“Audio only"))).perform(click())
}

我收到如下错误:

androidx.test.espresso.NoMatchingViewException: No views in hierarchy found matching: is assignable from class: class android.widget.AdapterView

知道如何解决吗?

因为你使用的是PreferenceFragmentCompat,所以你需要传递recycler_view作为id,因为PreferenceFragmentCompat 在内部使用 RecyclerView。然后你需要使用 RecyclerViewActions.actionOnItem.

我们看下面的代码:

fun pressAudioOnlyToggle() {
    Espresso.onView(ViewMatchers.withId(androidx.preference.R.id.recycler_view))
    .perform(
        RecyclerViewActions.actionOnItem<RecyclerView.ViewHolder>(
            ViewMatchers.hasDescendant(ViewMatchers.withText("Audio only")),
            ViewActions.click()
        )
    )
}

这将按下开关并将其打开(如果之前关闭)。