wix / Detox

Gray box end-to-end testing and automation framework for mobile apps
https://wix.github.io/Detox/
MIT License
11.07k stars 1.91k forks source link

setPermissions API for Android #477

Open raphkr opened 6 years ago

raphkr commented 6 years ago

With the device object how do I set the overlay permissions to true for android.

Crash-- commented 6 years ago

You just have to install it since install use -g option ( https://github.com/wix/detox/blob/419d356506f0c1751072b8c44bfc663bece4a856/detox/src/devices/android/ADB.js#L51)

from adb

 install [-lrtsdg] PACKAGE
 install-multiple [-lrtsdpg] PACKAGE...
     push package(s) to the device and install them
     -l: forward lock application
     -r: replace existing application
     -t: allow test packages
     -s: install application on sdcard
     -d: allow version code downgrade (debuggable packages only)
     -p: partial application install (install-multiple only)
     -g: grant all runtime permissions
LeoNatan commented 6 years ago

I do see a use case where a setPermissions API would be beneficial for testing, just like iOS, where you may want to test your UI behaves correctly if permission has been granted or denied.

simonracz commented 6 years ago

@raphkr Maybe you ran into this too? A fix will be in the next release for emulators running on API lvl 23 or lower. (API lvl 24 and above worked well before.)

yogeshthanvi commented 5 years ago

Hi I have noticed in detox by default all permissions are set to be true in android. Is this the true behaviour of detox

Himani33 commented 2 years ago

Is any update on this issue? How can we setPermission to NO in Android device for example in launch() API we want to set {Camera: No}

SarjuHansaliya commented 2 months ago

For anyone looking for a workaround, currently I am using adb command to grant/revoke camera and other permissions.

Here is code I am using

export const grantAndroidCameraPermission = async (
  bundleIdentifier: string
) => {
  execSync(`adb shell pm grant ${bundleIdentifier} android.permission.CAMERA`);
};

And I run this as soon as launch the app

beforeEach(async () => {
  await launchApp();
  await grantAndroidCameraPermission("com.xyz.abc");
});