有没有人能够使用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)
...
我已经解锁了键盘锁,甚至还运行了其他(非TouchUtils)测试用例。
我没有应用@UiThreadTest
,也没有运行任何需要在UI线程上运行代码的东西。
当我注释掉使用TouchUtils.dragViewTo(...)
并放入简单assert(true)
的行时,测试会运行并通过。
有什么想法吗?
答案 0 :(得分:2)
如果您的手机被锁定或主屏幕上有其他活动,则会发生这种情况。
答案 1 :(得分:0)
模拟器速度很慢,当您在关闭虚拟键盘后模拟UI交互时,虚拟键盘没有足够的时间来解除,因此您实际上是将事件注入虚拟键盘而不是应用程序
在隐藏软键盘后尝试进行任何UI交互之前,只需在线程上休眠约500-1000毫秒。
try {
Thread.sleep(500);
}
catch (InterruptedException e) {
e.printStackTrace();
}