我正在为recyclerview编写测试用例。我在recyclerview中受拖放测试的困扰。我尝试了某种方式。但无法为recyclerview编写拖放测试。
在recyclerview中,我有拖动按钮。使用该按钮,我将项目拖放到其他位置。
我的代码从下往上滑动
onView(withId(R.id.recyclerView)).perform(
RecyclerViewActions.actionOnItemAtPosition(0, new GeneralSwipeAction(
Swipe.SLOW, GeneralLocation.BOTTOM_CENTER, GeneralLocation.TOP_CENTER,
Press.FINGER)));
此代码在回收站视图中滑动。
所以我想这样:
onView(withId(R.id.recyclerView)).perform(
RecyclerViewActions.actionOnItemAtPosition(0,
MyViewAction.clickChildViewWithId(R.id.img_drag)),new GeneralSwipeAction(
Swipe.SLOW, GeneralLocation.TOP_RIGHT, GeneralLocation.CENTER_RIGHT,
Press.FINGER));
但这对我来说不是锻炼。请让我有任何想法来测试拖放功能。
答案 0 :(得分:3)
您编写的代码首先单击拖动手柄,然后从第一个项目的右上方滑动到其中心右方。如果要拖放项目,则需要几个自定义CoordinatesProvider
。
RecyclerViewCoordinatesProvider
将在RecyclerView中找到某项的坐标:class RecyclerViewCoordinatesProvider(private val position: Int, private val childItemCoordinatesProvider: CoordinatesProvider) : CoordinatesProvider {
override fun calculateCoordinates(view: View): FloatArray {
return childItemCoordinatesProvider.calculateCoordinates((view as RecyclerView).layoutManager!!.findViewByPosition(position)!!)
}
}
ChildViewCoordinatesProvider
将找到具有给定id的孩子的坐标:class ChildViewCoordinatesProvider(private val childViewId: Int, private val insideChildViewCoordinatesProvider: CoordinatesProvider) : CoordinatesProvider {
override fun calculateCoordinates(view: View): FloatArray {
return insideChildViewCoordinatesProvider.calculateCoordinates(view.findViewById<View>(childViewId))
}
}
enum class CustomGeneralLocation : CoordinatesProvider {
UNDER_RIGHT {
override fun calculateCoordinates(view: View): FloatArray {
val screenLocation = IntArray(2)
view.getLocationOnScreen(screenLocation)
return floatArrayOf(screenLocation[0] + view.width - 1f, screenLocation[1] + view.height * 1.5f)
}
},
ABOVE_RIGHT {
override fun calculateCoordinates(view: View): FloatArray {
val screenLocation = IntArray(2)
view.getLocationOnScreen(screenLocation)
return floatArrayOf(screenLocation[0] + view.width - 1f, screenLocation[1] - view.height * 0.5f)
}
}
}
现在,如果您要拖动项目from
的原始位置to
,则目标位置是RecyclerView
的ID为server_list
且拖动手柄的ID为{{ 1}},请使用以下方法:
drag_handle