android-espresso-web - 无法使用 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
知道如何解决吗?
解决方案
当您使用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()
)
)
}
这将按下开关并将其打开(如果之前关闭)。
推荐阅读
- google-cloud-platform - Terraform - GCP - 连接:连接被拒绝
- socket.io - socketIO 中的响应事件是否有任何命名约定?
- magento - 切换主页语言
- python - a 和 b 的导数,使用算法微分
- android - ashmem 给予 [Errno 13] 权限被拒绝
- python - 从多个 JSON 文件中提取特定元素并添加到单个 Excel 中
- google-apps-script - 来自 Webhook 的 WebApp postData 间歇性地将 Google 从 Missive 空白到 Google Apps 脚本
- android - 将 Ionic 限制为仅限 Android 上的智能手机设备
- python - 如何诊断为什么我的 python 内核死了?
- c++ - 从 C++ 中 int main() 中的无序映射调用函数时,在非成员函数中使用“this”无效