我已经使用我的手机运行仪器化 Android 测试很长时间了。今天我想我应该切换到模拟器,但我发现一些在我的手机上通过的测试在模拟器上却无法通过——因为滑动手势在模拟器上所做的事情与在我的手机上所做的不同(Xperia) Z5 紧凑型,Android 7.1.1)。我还在模拟器中运行相同版本的 Android。
当在模拟器上运行时,ViewActions.swipeLeft() 方法似乎开始向右滑动太远,并导致当您从 ViewPager 末端的屏幕边缘拖动时出现小波浪动画。当手动完成时,滑动在手机和模拟器上工作得很好。因此,我认为这一定与 Espresso 有关。我可以想象问题可能出在可滑动 ViewPager 内的 RecyclerView 中的滑动监听器。但它在模拟器和手机上运行良好,并且在我的手机上测试通过。
这是我的滑动处理代码,它被添加到 ViewPager 选项卡(在最后一个选项卡上)内的 RecyclerView 中。
fun attachSingleSwipeActionToRecyclerView(
direction: Int = ItemTouchHelper.LEFT,
recyclerView: RecyclerView,
swipeAction: RecyclerView.ViewHolder.() -> Unit
): ItemTouchHelper {
val simpleCallback = object : ItemTouchHelper.SimpleCallback(0, direction) {
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
swipeAction(viewHolder)
}
}
val itemTouchHelper = ItemTouchHelper(simpleCallback)
itemTouchHelper.attachToRecyclerView(recyclerView)
return itemTouchHelper
}
在我的测试中,我只是在屏幕上的第一个 RecyclerView 项目上调用 ViewActions.swipeLeft() 。
我尝试为 Espresso 滑动创建自己的起点,即使我让它从最中心而不是最右侧开始,也没有任何变化,包括 ViewPager 波浪动画的结束
GeneralSwipeAction(
Swipe.FAST,
GeneralLocation.CENTER,
GeneralLocation.CENTER_LEFT,
Press.FINGER
)
模拟器可能有什么不同,导致 Espresso 滑动的行为与真实设备上不同?
最佳答案
有时,GeneralSwipeAction
可能会变得不可靠,因为它的计算会根据不同的屏幕尺寸或密度而变化,因此它可能不适合您的情况下的 ViewPager
。相反,您可以尝试使用 ViewPagerActions 滚动。 :
// Moves ViewPager to the right be one page.
onView(your_view_pager).perform(ViewPagerActions.scrollRight());
// Moves ViewPager to a specific page.
onView(your_view_pager).perform(ViewPagerActions.scrollToPage(page_number));
关于android-recyclerview - Espresso 滑动手势测试在 Android 模拟器上失败,但在真实设备上通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53606094/