Cómo corregir la excepción de permiso INJECT_EVENT al enviar toques a una prueba de ActivityInstrumentationTestCase2
Aunque hay muchos ejemplos que muestran que algo como esto debería funcionar, el código siguiente falla. Este código vive en un proyecto de prueba que está asociado con el proyecto real.
public class MyTest extends ActivityInstrumentationTestCase2<MyActivity> { public MyTest(String name) { super("com.mypackage.activities", MyActivity.class); setName(name); } public void testTap() throws Throwable { //Required by MotionEvent.obtain according to JavaDocs long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); Instrumentation i = getInstrumentation(); //Setup the info needed for our down and up events to create a tap MotionEvent downEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 300, 20, 0); MotionEvent upEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, 300, 20, 0); //Send the down/up tap event i.sendPointerSync(downEvent); i.sendPointerSync(upEvent); //Delay to see the results Thread.currentThread().sleep(3000); } }
Esto lanza una java.lang.SecurityException: Inyectar a otra aplicación requiere el permiso INJECT_EVENTS en las llamadas i.sendPointerSync (). También he intentado view.onTouchEvent (event) y view.dispatchTouchEvent (event) sin éxito.
- No se pueden construir pruebas con Gradle (decard-gradle)
- Prueba de unidad de Android con Retrofit / RxJava / Roboletric y Mockito
- Prueba de unidad de Android: ActivityMonitor waitForActivityWithTimeout devuelve NULL, getActivity nunca devuelve, error de permiso de INJECT_EVENTS
- ¿Cómo probar una unidad que usa HttpClient en Android usando el marco incorporado?
- Android @NonNull utilidad
Lo único que puedo pensar es si los ejemplos donde esto está trabajando viven en el proyecto que está siendo probado. Esto parece malo porque la recomendación es separar las pruebas a un proyecto diferente y poder ejecutarlas desde un servidor de compilación con algo así como:
adb -e shell am instrument -w com.mypackage.activities.test/android.test.InstrumentationTestRunner
- ActivityUnitTestCase y startActivity
- ¿Cómo burlar los gráficos de objetos de actividad de Dagger?
- La invocación de Apache DefaultHttpClient resulta en "java.lang.RuntimeException: Stub!"
- Deshabilitar el error de clase duplicado para las clases en la carpeta de prueba - Android Studio / IntelliJ
- IllegalStateException en Android Support al ejecutar pruebas de unidad
- Enredado con la prueba de Google
- PowerMock en el proyecto Android
- Robolectric no utiliza ShadowWebView como la superclase de una clase que extiende WebView. MustOverrideException en su lugar
Esto probablemente significa que su proyecto principal, el proyecto de prueba o las versiones de su emulador están fuera de sincronización.
Podría ayudar a otros.
El problema que tenemos es
Error al realizar el gesto. Java.lang.SecurityException: Inyectar a otra aplicación requiere el permiso INJECT_EVENTS (RuntimeError ")
En mi caso, el problema era con el
La red no está conectada
. Una vez resuelto el problema de la conexión de red, se están ejecutando las pruebas.