带Android仿真器的TouchUtils
有没有人能够使用带Android仿真器的TouchUtils,android,unit-testing,Android,Unit Testing,有没有人能够使用TouchUtils类提供的方法在Android仿真器上成功地执行单元测试? 我能够在我的设备上通过测试,但当我在模拟器上运行完全相同的测试(和测试套件)时,任何使用TouchUtils方法的测试都会引发以下异常: java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission at android.os.Parcel.readException(Par
TouchUtils
类提供的方法在Android仿真器上成功地执行单元测试?
我能够在我的设备上通过测试,但当我在模拟器上运行完全相同的测试(和测试套件)时,任何使用
TouchUtils
方法的测试都会引发以下异常:
java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
at android.os.Parcel.readException(Parcel.java:1327)
at android.os.Parcel.readException(Parcel.java:1281)
at android.view.IWindowManager$Stub$Proxy.injectPointerEvent(IWindowManager.java:1196)
at android.app.Instrumentation.sendPointerSync(Instrumentation.java:902)
at android.test.TouchUtils.drag(TouchUtils.java:786)
at android.test.TouchUtils.dragViewTo(TouchUtils.java:633)
...
我解锁了keyguard,甚至运行了其他(非TouchUtils)已通过的测试用例。
我没有应用
@UiThreadTest
,也没有运行任何需要在UI线程上运行代码的操作。
当我注释掉使用
TouchUtils.dragViewTo(…)
的行并放入一个简单的assert(true)
时,测试运行并通过
有什么想法吗?如果您的手机被锁定或主屏幕上有其他活动,就会发生这种情况。模拟器速度太慢,以至于当您在关闭虚拟键盘后模拟UI交互时,没有足够的时间让虚拟键盘退出,因此实际上是将事件注入虚拟键盘,而不是应用程序 隐藏软键盘后,在尝试进行任何UI交互之前,只需在线程上休眠约500-1000毫秒
try {
Thread.sleep(500);
}
catch (InterruptedException e) {
e.printStackTrace();
}
它在我的手机上工作,在模拟器上不工作。我已经从屏幕上移除了锁,因为我可以看到其他测试正在模拟器上运行。你找到答案了吗?我也有这个麻烦,在这个问题上没有太多的东西可以找到。