android-recyclerview - Espresso 滑动手势测试在 android 模拟器上失败,但在真实设备上通过
问题描述
很长一段时间以来,我一直在使用手机运行带仪表的 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));
推荐阅读
- sql - SQL - 获取按周分组的两个日期之间的数据
- ethereum - 更新值 rpccorsdomain?
- javascript - 在codeigniter中使用时出现ajax错误
- symfony - Symfony 4路由:带有多个斜杠的多个参数?
- c - 在 BerkeleyDB 示例代码上获取线程 EXC_BAD_ACCESS
- java - 如何将字符添加到数组中?
- postgresql - 根据表2中的行值将记录插入表1
- mariadb - Mariadb 查询更新 * 为 json 结构
- laravel - 即使会话不空闲,Laravel 中的所有会话也会频繁且随机地被记录/清除
- archlinux - 没有可用的 yaml-cpp 镜像