首页 > 解决方案 > 无法使用 Espresso Ui 测试(Android)点击 SwitchPreference

问题描述

我有一个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

知道如何解决吗?

标签: android-espresso-web

解决方案


当您使用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()
        )
    )
}

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


推荐阅读