无法使用 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()
)
)
}
这将按下开关并将其打开(如果之前关闭)。
我有一个 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()
)
)
}
这将按下开关并将其打开(如果之前关闭)。