【问题标题】:swipe tests flaky on RecyclerView在 RecyclerView 上滑动测试不稳定
【发布时间】:2016-05-25 15:49:07
【问题描述】:

我有一个带有 ItemTouchHelper 的 RecyclerView 来向左和向右滑动内部项目 - 当我通过 espresso 对它们执行 swipeLeft() 和 swipeRight() 时,如下所示:

onView(withId(R.id.pass_recyclerview)).perform(RecyclerViewActions.actionOnItemAtPosition(0,swipeRight()));

但不幸的是,这些测试是不稳定的 - 在某些设备上它们可以工作,而在某些设备上它们不能 - 是否有可靠的方法来执行此滑动操作?我已经玩过其他 EDGE_FUZZ_FACTOR - 但这也不是让它 100% 工作的方法

更新: 我对问题进行了更多的调试——在某些设备上,两者之间有一个取消事件:

event_t1 = {android.view.MotionEvent@830019549128} "MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=546.0, y[0]=40.0, toolType[0]=TOOL_TYPE_UNKNOWN, buttonState =0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=788701990, downTime=788701990, deviceId=0, source=0x1002 }"

event_t2 = {android.view.MotionEvent@830019178264} "MotionEvent { action=ACTION_CANCEL, id[0]=0, x[0]=500.98276, y[0]=40.0, toolType[0]=TOOL_TYPE_UNKNOWN, buttonState =0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=1, eventTime=788722868, downTime=788701990, deviceId=0, source=0x1002 }"

我在 ItemTouchHelper 的“public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event)”中看到了这一点。 这些是我在那里看到的唯一事件 - 有趣的是,当激活显示触摸数据的屏幕叠加层时,我看到在 ~1/10 的方式取消后滑动完成良好

【问题讨论】:

  • 请添加失败尝试的 logcat。可能在某些设备上无法正确看到这个 recyclerView
  • 不,我确实看到了回收商的意见

标签: android android-espresso


【解决方案1】:

也许问题在于默认的 swipeLeft/Right 实现使用的是按压类型 FINGER(这意味着 16x16 毫米)。您可以尝试创建自己的滑动实现为described here

【讨论】:

  • 我尝试了所有 Press.FINGER、Press.PINPOINT、Press.Thumb - 相同的行为 - 也使用不同的 EDGE_FUZZ_FACTOR - 无法以这种方式为所有设备解决此问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多