Android emulator 33 Espresso测试onView滑动操作失效问题
修复API 33版本Android模拟器Espresso滑动操作失效问题
问题对应场景
- 测试环境:API 33 版本Android模拟器
- 异常表现:全方向屏幕拖拽、滑动操作无响应,调用
onView(x).perform(swipeUp())、swipeDown()、swipeLeft()等内置滑动方法均不触发对应效果,公开网络无直接匹配的参考解决方案
问题根因
Android 13(API 33)新增了输入事件有效性校验规则,会对滑动操作的按压停留时长、滑动速度做阈值判断,低于阈值的事件会被系统判定为无效注入事件直接丢弃,不会派发给应用层。Espresso 3.5.0以下版本内置的滑动方法默认滑动时长仅100ms、滑动速度过快,刚好触发该拦截规则,导致操作失效。
可落地修复方案
- 优先升级测试依赖
将Espresso核心依赖升级到3.5.0及以上版本,官方已经在该版本适配了API 33的输入校验规则,调整了内置滑动方法的默认参数,无需修改业务测试代码即可解决问题,依赖配置如下:androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' - 无法升级依赖时自定义滑动参数
若受项目限制不能升级Espresso版本,可手动自定义滑动操作实例,调长滑动总时长到200-300ms区间,绕开系统的无效事件拦截,以上滑为例的代码实现:// 其余方向滑动可调用swipeDown/swipeLeft/swipeRight方法,传参逻辑一致 val validSwipeUp = swipeUp( pressCoercer = Press.FINGER, startEdgeMargin = 150, endEdgeMargin = 10, duration = 250 ) onView(x).perform(validSwipeUp) - 排查模拟器配置拦截
若上述两种方案操作后仍失效,检查两个模拟器配置项:- 进入设置 > 系统 > 手势 > 系统导航,切换为三键导航模式,排除全屏手势导航对边缘滑动事件的拦截
- 进入开发者选项,关闭「允许通过USB调试修改权限或模拟点击」的安全设置开关,该开关开启时会拦截测试框架注入的滑动事件
验证注意事项
执行测试前先手动在目标页面做一次同方向滑动,确认控件本身支持滑动、不存在布局层级遮挡问题,再运行测试用例即可正常触发滑动效果。
内容的提问来源于stack exchange,提问作者Rako
相关产品推荐
相关产品推荐

