ActivityTestRule类的构造函数中需要一个initialTouchMode
参数。在类参考(或任何在线文档)中没有对此进行解释,除了以下内容:
initialTouchMode - 如果 Activity 在启动时应该进入“触摸模式”,则为 true
“触摸模式”究竟是什么意思?在ActivityTestRule中将initialTouchMode
设置为true
或false
有什么影响?(我看到这个参数的默认值为false
。)
ActivityTestRule类的构造函数中需要一个initialTouchMode
参数。在类参考(或任何在线文档)中没有对此进行解释,除了以下内容:
initialTouchMode - 如果 Activity 在启动时应该进入“触摸模式”,则为 true
“触摸模式”究竟是什么意思?在ActivityTestRule中将initialTouchMode
设置为true
或false
有什么影响?(我看到这个参数的默认值为false
。)
触摸模式影响视图焦点和选择的工作方式。
触摸模式是视图层次结构的一种状态,仅取决于用户与手机的交互。本身而言,触摸模式非常容易理解,因为它仅表示上次用户交互是否使用了触摸屏幕。
...
在触摸模式下,没有焦点和选择。
http://android-developers.blogspot.com/2008/12/touch-mode.html
我认为以下来自一篇中文文章的解释可以很好地理解ActivityTestRule
中的触摸模式
。
"在触摸模式下,没有焦点和选择。"
换句话说,当您的手指触摸屏幕时,不会产生副作用。例如,视图不会保持焦点。除非您回忆起Android OS在非可触摸平台上的行为,否则这没有意义。不操作“触摸模式”的最佳现代示例是Android TV。使用D-Pad控制,我们能够选择或聚焦视图,并且一旦视图被聚焦,我们就可以执行单击操作。
要小心RecyclerView和触摸模式!假设我们想对
RecyclerView
中的视图
执行单击操作
。
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItem(
hasDescendant(withId(R.id.someAction)), click()))
除非你犯了一个错误并且在测试中以禁用触摸模式启动了
Activity
,否则代码很直接。
val initialTouchMode = false
val launchActivity = true
@JvmField @Rule var activityRule = ActivityTestRule(
MainActivity::class.java, initialTouchMode, launchActivity
)
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItem(
hasDescendant(withId(R.id.someAction)), click()))
.perform(RecyclerViewActions.actionOnItem(
hasDescendant(withId(R.id.someAction)), click()))
触摸模式
一样简单,只需启动带有启用触摸模式的活动即可。val initialTouchMode = true
val launchActivity = true
@JvmField @Rule var activityRule = ActivityTestRule(
MainActivity::class.java, initialTouchMode, launchActivity
)
解释可以在此链接中找到: https://medium.com/@tom.koptel/espresso-initialtouchmode-can-shoot-you-in-the-leg-85c5f922754
ActivityTestRule
中的initialTouchMode
设置为true
或false
会有什么影响? - Adil Hussain