Haga clic en la notificación de Android mediante programación
Soy la caja negra que prueba una aplicación usando el marco de Robotium . La aplicación sometida a prueba envía una notificación en la barra de estado cada vez que instalo una nueva aplicación. Me gustaría hacer clic en esa notificación, pero todavía no encontré una forma adecuada de hacerlo.
Cuando hago clic manualmente en una notificación, obtengo las logcat
líneas logcat
:
- Instalación de un apk de Android mediante programación como parte de un marco de prueba
- Comprobar la existencia de un fragmento usando Robotium - Android
- Android: Robotium vs marco de prueba de Android
- Las pruebas existentes de la interfaz de usuario de Android dejaron de funcionar después de cambiar a AndroidJUnitRunner
- ¿Cómo puedo comprobar en Robotium que la aplicación ha terminado?
I/ActivityManager( 148): START {flg=0x14000000 cmp=com.test.package/.activity.FrontActivity bnds=[0,38][240,86] (has extras) u=0} from pid -1 I/ActivityManager( 148): START {flg=0x14000000 cmp=com.test.package/.activity.ResultActivity u=0} from pid 8600 I/ActivityManager( 148): Displayed com.test.package/.activity.FrontActivity: +1s183ms I/ActivityManager( 148): Displayed com.test.package/.activity.ResultActivity: +744ms
Sé que Robotium no puede probar 2 aplicaciones diferentes al mismo tiempo, así como sé que no se puede obtener la notificación de una aplicación externa.
También intenté obtener la intención pendiente y dispararla usando el siguiente código:
Context context = this.getInstrumentation().getTargetContext().getApplicationContext(); String intentClassString = "com.test.package.activity.FrontActivity"; Class<?> intentClass = null; try { intentClass = Class.forName(intentClassString); } catch (ClassNotFoundException e) { e.printStackTrace(); } Intent intent = new Intent(context, intentClass); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_NO_CREATE); try { pendingIntent.send(); } catch (CanceledException e) { e.printStackTrace(); }
La actividad realmente se muestra, pero es diferente de lo que obtengo invocándola manualmente. Creo que algo está mal en el contexto que paso, o la forma en que llamo la intención pendiente.
¿Alguna pista sobre este problema? ¿Hay una mejor manera de simular el clic en una notificación?
- Android Robotium NoClassDefFoundError
- Haciendo clic en los elementos del menú de la barra de acción en Robotium
- Pruebas de aceptación automatizadas para dispositivos iOS y Android
- Android Testing - Problema con ActivityInstrumentationTestCase2?
- Interfaz Android robotium pruebas con Teamcity
- Ejecute la prueba Junit utilizando la instrumentación de android en un paquete con clases en orden específico
- Se ha producido un error en la ejecución de la prueba: no se pudo completar la prueba. Se esperan 1 pruebas, recibidas 0
- Falso positivos: junit.framework.AssertionFailedError: EditText no se encuentra
Puede activar el desplazamiento en la barra de notificaciones y pulsar evento en la notificación.
Referir órdenes:
adb shell input swipe 100 500 400 100 1000 adb shell input tap 400 400
Cambiando los argumentos que puede utilizar estos comandos.
Por favor encuentre un buen dicussion y algunas opciones en esta otra pregunta stackoverflow:
¿Puedo probar las notificaciones de la barra de estado utilizando el marco de pruebas de Android?
Puesto que ya tienes código para activar una intención, en lugar de intentar recrear lo que haría la llamada notify (), intenta agregar una actividad especial sólo para las pruebas que realmente llama notify () en la notificación.
La respuesta que Ranjith KP le dio contiene la solución. Tenga en cuenta que necesita el teléfono que está ejecutando la aplicación enraizada, ya que son comandos utilizados con privilegios de sudo.
Este es el código que está funcionando para mí. Primero extiende la barra de notificación (comando de desplazamiento), espera 1 segundo y finalmente toca la primera notificación en la lista. Modifique los parámetros del eje como desee.
Process su = null; try { su = Runtime.getRuntime().exec("su"); su.getOutputStream().write("input swipe 270 010 270 900\n".getBytes()); Thread.sleep(1000); su.getOutputStream().write("input tap 200 200\n".getBytes()); su.getOutputStream().write("exit\n".getBytes()); su.waitFor(); } catch (Exception e) { e.printStackTrace(); } finally { if (su != null) { su.destroy(); } }
- Custom Span Subrayar texto con línea punteada Android
- ¿Por qué Android trata una aplicación en ANR cuando está en la espera de looper