Android revoca el permiso al inicio de cada prueba

Estoy usando Espresso y UIAutomator para escribir mis casos de prueba. Estoy probando permisos de almacenamiento externo cuando se deniega y cuando se permite. Tengo diferentes casos de prueba que requieren el permiso para ser revocados al inicio del caso de prueba. Sin embargo, algunos de los casos de prueba deben resultar en el permiso, por lo que necesito revocar el permiso cuando se ejecute la siguiente prueba. He buscado alrededor y lo más cercano que encontré es usar el gerente pm para ejecutar comandos de shell de adb para revocar el permiso. Sin embargo, al hacerlo, obtendré el siguiente error, la ejecución de instrumentación falló debido a 'fallo del proceso'. ¿Hay alguna manera de asegurar que los permisos sean revocados al principio de cada caso de prueba? Si no es así, ¿cómo se puede resolver este problema con respecto a los permisos de prueba? ¡De forma anticipada, muchas gracias por su ayuda!

Este es el fragmento de código que actualmente tengo que revocar el permiso antes de cada caso de prueba (que no funciona):

@Before public void setUp() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getInstrumentation().getUiAutomation().executeShellCommand( "pm revoke " + getTargetContext().getPackageName() + " android.permission.WRITE_EXTERNAL_STORAGE"); } } 

Mensaje de error correspondiente al intentar revocar permiso con el fragmento de código anterior:

 Test failed to run to completion. Reason: 'Instrumentation run failed due to 'Process crashed.''. 

También he encontrado estos dos puestos: esto y esto .

No puedes. Los permisos de concesión / revocación están bajo control de usuario.

Sin embargo, puede conceder / revocar permisos a través de adb y puede activar los comandos de adb mediante programación, pero no tengo ni idea de si esto funciona en combinación? …

 adb shell pm grant [app.package] [permission] adb shell pm grant com.app.package.path android.permission.READ_CONTACTS 

( Mira aquí )

¿Podría asignar sus permisos a valores booleanos para propósitos de prueba?

No estoy seguro de cómo hacerlo en tiempo de ejecución sin preguntar al usuario. Sin embargo, usted declaró en el título que es para propósitos de prueba. Por lo tanto tengo algunas opciones que puedo sugerirle

A) Cuando se necesite hacer una prueba sin permisos, sólo revuévalo manualmente usando la configuración de su dispositivo.

B) Usted podría verificar y pedir permiso, entonces negarse a dar permiso. Te daría un código que utilizo para verificar y pedir permiso de cámara. Tendrías que cambiar el nombre del permiso, y tal vez la condición para comprobar:

 public static boolean checkCameraPermission(MainActivity thisActivity) { return ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED; } public static void checkAndAskCameraPermission(final MainActivity thisActivity) { if (!checkCameraPermission(thisActivity)) { //No right is granted // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.CAMERA)) { //Open a dialog explaining why you are asking permission then when when positive button is triggered, call this line ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.CAMERA}, CHECK_FOR_CAMERA_PERMISSION); } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.CAMERA}, CHECK_FOR_CAMERA_PERMISSION); } } } 

Podría darle algunos más acoplamientos sobre el b) (cómo pedir permisos) si usted necesita tan (apenas comente él). Sin embargo, como no estoy seguro de que esta respuesta le interesa, no voy a gastar tiempo para documentar esta opción.

Pero entonces, tal vez alguien será capaz de explicar cómo hacerlo directamente en tiempo de ejecución sin preguntar, pero creo que puede ser interesante para proporcionar al menos esta información.

  • Establecer diferentes minSdkVersion para testAndroid que para la aplicación principal
  • UiAutomator falla en el dispositivo 4.1.2
  • Seleccione el elemento de AutoCompleteTextView en uiautomator
  • Android UIAutomator haga clic en el dispositivo
  • Proyecto Ui Automator 2.0 en Android Studio
  • uiautomator - no puede obtener ListView para desplazarse como validar el texto en cada elemento de la lista. sólo falla cuando golpeo el último elemento en la pantalla
  • ¿Cualquier forma más rápida de volcar la jerarquía de la interfaz de usuario?
  • UI Automator en proyecto con minSdkVersion 9
  • Android: Espresso no espera hasta que se muestre fragmento o actividad para que cada prueba fallara
  • ¿Hay una manera de obtener el diseño de la actividad actual y las vistas a través de adb?
  • Construir UiAutomator 2.0 desde la línea de comandos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.