No se puede hacer clic en el botón Permitir en el diálogo de permisos en Android mediante Appium.

No puedo tocar en los botones Denegar o Permitir en el diálogo de permisos en Android mediante Appium + Java. ¿Necesito agregar alguna capacidad antes de ir a tocar en esos botones? A continuación se muestra el código:

DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("deviceName", "ASUS_Z00LD"); capabilities.setCapability("platformVersion", "6.0"); capabilities.setCapability("app","<AppPath>"); capabilities.setCapability("browserName", ""); AndroidDriver<MobileElement> driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); Thread.sleep(10000); driver.findElement(MobileBy.id("permission_allow_button")).click(); 

A continuación se muestra un error en la consola de Eclipse:

 org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters. (WARNING: The server did not provide any stacktrace information) 

A continuación se muestra el registro de Appium:

 info: [debug] Responding to client with success: {"status":0,"value":{"platform":"LINUX","browserName":"","platformVersion":"6.0.1","webStorageEnabled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":true,"locationContextEnabled":false,"warnings":{},"desired":{"app":"/Users/Shiva/Documents/workspace/AndroidPractice/APK/Motiv_Android.apk","browserName":"","platformName":"Android","deviceName":"ASUS_Z00LD","platformVersion":"6.0"},"app":"/Users/Shiva/Documents/workspace/AndroidPractice/APK/Motiv_Android.apk","platformName":"Android","deviceName":"FAAZCY127084"},"sessionId":"b64fd5af-3de5-4299-a2d4-1948fc8e883e"} info: <-- GET /wd/hub/session/b64fd5af-3de5-4299-a2d4-1948fc8e883e 200 1.534 ms - 625 {"status":0,"value":{"platform":"LINUX","browserName":"","platformVersion":"6.0.1","webStorageEnabled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":true,"locationContextEnabled":false,"warnings":{},"desired":{"app":"/Users/Shiva/Documents/workspace/AndroidPractice/APK/Motiv_Android.apk","browserName":"","platformName":"Android","deviceName":"ASUS_Z00LD","platformVersion":"6.0"},"app":"/Users/Shiva/Documents/workspace/AndroidPractice/APK/Motiv_Android.apk","platformName":"Android","deviceName":"FAAZCY127084"},"sessionId":"b64fd5af-3de5-4299-a2d4-1948fc8e883e"} info: --> POST /wd/hub/session/b64fd5af-3de5-4299-a2d4-1948fc8e883e/element {"using":"id","value":"permission_allow_button"} info: [debug] Waiting up to 0ms for condition info: [debug] Pushing command to appium work queue: ["find",{"strategy":"id","selector":"permission_allow_button","context":"","multiple":false}] info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"id","selector":"permission_allow_button","context":"","multiple":false}} info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION info: [debug] [BOOTSTRAP] [debug] Got command action: find info: [debug] [BOOTSTRAP] [debug] Finding permission_allow_button using ID with the contextId: multiple: false info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[INSTANCE=0, RESOURCE_ID=com.shure.motiv:id/permission_allow_button] info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[INSTANCE=0, RESOURCE_ID=android:id/permission_allow_button] info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[DESCRIPTION=permission_allow_button, INSTANCE=0] info: [debug] [BOOTSTRAP] [debug] Failed to locate element. Clearing Accessibility cache and retrying. info: [debug] [BOOTSTRAP] [debug] Finding permission_allow_button using ID with the contextId: multiple: false info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[INSTANCE=0, RESOURCE_ID=com.shure.motiv:id/permission_allow_button] info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[INSTANCE=0, RESOURCE_ID=android:id/permission_allow_button] info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[DESCRIPTION=permission_allow_button, INSTANCE=0] info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":7,"value":"No element found"} info: [debug] Condition unmet after 178ms. Timing out. info: [debug] Responding to client with error: {"status":7,"value":{"message":"An element could not be located on the page using the given search parameters.","origValue":"No element found"},"sessionId":"b64fd5af-3de5-4299-a2d4-1948fc8e883e"} info: <-- POST /wd/hub/session/b64fd5af-3de5-4299-a2d4-1948fc8e883e/element 500 181.769 ms - 195 

Cualquier persona ayuda a superar esto sería apreciado?

Con el siguiente fragmento puedo hacer clic en todos los botones de permiso para obtener los permisos.

 while (driver.findElements(MobileBy.xpath("//*[@class='android.widget.Button'][2]")).size()>0) { driver.findElement(MobileBy.xpath("//*[@class='android.widget.Button'][2]")).click(); } 

Utilizar ID de recurso completo … Funcionó para mí ….

Debajo de la línea trabajada para mí …. driver.findElement (MobileBy.id ("com.android.packageinstaller: id / permission_allow_button")). Click ();

Appium te da una API que detecta la actividad. Dependiendo de su dispositivo, podría obtener dos actividades: el nombre del paquete puede ser eliminado o no:

 'com.android.packageinstaller.permission.ui.GrantPermissionsActivity', '.permission.ui.GrantPermissionsActivity' 

Después de detectar esta actividad, debe encontrar un elemento por localizador (id / xpath):

 'com.android.packageinstaller:id/permission_message' 

Entonces usted puede obtener el texto de ese mensaje si usted está interesado en él. Si se preocupa por el permiso, puede combinarlo con las cadenas esperadas o las expresiones regulares. Si no, puede aceptar ciegamente al encontrar y hacer clic en el elemento por id:

 'com.android.packageinstaller:id/permission_allow_button' 

Si prefiere no hacer clic en "permitir" en todas esas ventanas, puede usar adb para agregar todos los permisos de una vez antes de comenzar a probar (pero después de que Appium haya instalado su aplicación). Si conoce todos los permisos necesarios para su aplicación, puede agregarlos con un comando:

 pm grant $app_name $space_delimited_set_of_perms 

O puede agregar todos los permisos uno a la vez, que tarda de 1,5 a 2 segundos por intento.

Referencia: https://discuss.appium.io/t/android-m-and-permissions/5760/13

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.