Как включить / отключить разрешение приложения с помощью Appium? - PullRequest
0 голосов
/ 06 сентября 2018

Мое приложение требует разрешения нескольких приложений. Мне нужно проверить, как ведет себя мое приложение, разрешив или запретив другое разрешение. Как я могу включить / отключить разрешение приложения от appium для создания множественного сценария?

Например, допустим, что моему приложению нужны разрешения: permission1 и permission2.

scenario 1 = allow permission1 allow permission2

scenario 2 = allow permission1 deny permission2

scenario 3 = deny permission1 allow permission2

scenario 4 = deny permission1 deny permission2

Ответы [ 6 ]

0 голосов
/ 04 января 2019

Приведенные выше ответы не решили мою проблему. Я решил эту проблему с помощью заглавных букв " autoGrantPermissions ".

Установка:

required_caps ['autoGrantPermissions'] = True

Вам придется отключить заглавные буквы noReset на False, иначе это не сработает. Смотрите ссылку здесь: http://appium.io/docs/en/writing-running-appium/caps/

0 голосов
/ 06 ноября 2018

Прежде чем запускать / инициализировать драйвер appium, просто предоставьте все необходимые разрешения соответствующему приложению с помощью команды adb, как показано ниже, чтобы всплывающее окно ALLOW не отображалось:

        adb -s yourDeviceSerialNumber shell pm grant your.app.packagename android.permission.READ_EXTERNAL_STORAGE
        adb -s yourDeviceSerialNumber shell pm grant your.app.packagename android.permission.WRITE_EXTERNAL_STORAGE
        adb -s yourDeviceSerialNumber shell pm grant your.app.packagename android.permission.ACCESS_FINE_LOCATION
        adb -s yourDeviceSerialNumber shell pm grant your.app.packagename android.permission.CAMERA
        adb -s yourDeviceSerialNumber shell pm grant your.app.packagename android.permission.READ_CONTACTS

Вы можете вызвать их через код автоматизации для Android

OR

Есть возможности appium для предоставления разрешения: autoGrantPermissions Appium автоматически определяет, какие разрешения требуются вашему приложению, и предоставляет их приложению при установке. По умолчанию false. Если noReset имеет значение true, эта возможность не работает.

http://appium.io/docs/en/writing-running-appium/caps/

0 голосов
/ 05 ноября 2018

Я нашел решение для Android с помощью команды adb shell .

 String packageName= ((AndroidDriver) driver).getCurrentPackage();
 String grantCameraPermission= "adb shell pm grant " + packageName +" android.permission.CAMERA";
 String grantLocationPermission= "adb shell pm grant " + packageName +" android.permission.ACCESS_FINE_LOCATION";
 String revokeCameraPermission= "adb shell pm grant " + packageName +" android.permission.CAMERA";
 String revokeLocationPermission= "adb shell pm grant " + packageName +" android.permission.ACCESS_FINE_LOCATION";
        try {
            Runtime.getRuntime().exec(grantCameraPermission);
            Runtime.getRuntime().exec(revokeLocationPermission);

        } catch (IOException e) {
            e.printStackTrace();
        }

Вот список разрешений Android

0 голосов
/ 21 октября 2018

Вы должны правильно вызвать пакет приложения и возможности приложения ... Поэтому, когда вы работаете со своим приложением, затем установите пакет и активность для своего приложения, когда наступит активность андроида, вызовите пакет и активность для собственного андроида... Также обязательно установите пакет и активность для вашего приложения после того, как вы закончили с разрешениями ... Пожалуйста, найдите код ниже:

public static void main(String[] args) throws MalformedURLException {
    // TODO Auto-generated method stub

    File f=new File("src");
    File fs=new File(f,"app-debug.apk");

    DesiredCapabilities cap=new DesiredCapabilities();
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, "emulator-5554");
    cap.setCapability(MobileCapabilityType.APP, fs.getAbsolutePath());

    cap.setCapability("appPackage", "yourAppPackageName");
    cap.setCapability("appActivity", "yourAppActivityName");

    AndroidDriver<AndroidElement> driver=new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"),cap);
    cap.setCapability("appPackage", "com.google.android.packageinstaller");
    cap.setCapability("appActivity", "com.android.packageinstaller.permission.ui.GrantPermissionsActivity");
    driver.findElementById("com.android.packageinstaller:id/permission_allow_button").click();
0 голосов
/ 13 сентября 2018

В соответствии с вашими потребностями вы не можете управлять диалоговым окном разрешения с capabilities, поэтому вы должны использовать:

//for allow button
driver.findElement(By.id("com.android.packageinstaller:id/permission_allow_button")).click();
//or
driver.findElement(By.xpath("//*[@text='ALLOW']")).click();

//For deny button
driver.findElement(By.id("com.android.packageinstaller:id/permission_deny_button")).click();
//or
driver.findElement(By.xpath("//*[@text='DENY']")).click();
0 голосов
/ 06 сентября 2018

Одним из решений было бы перейти в приложение «Настройки» и автоматизировать сценарий в этом. Вы можете перейти в приложение «Настройки» (фактически, любое системное приложение iOS), указав идентификатор пакета. Для настройки приложения это com.apple.Preferences

Я использую ruby, но идея может быть аналогичной для других клиентов.

def launch_settings_app
    @driver.execute_script('mobile: launchApp', {'bundleId': "com.apple.Preferences"});
end

Другие идентификаторы пакетов можно найти здесь https://emm.how/t/ios-11-list-of-default-apps-and-bundle-id-s/465 Или используя командную строку - это вернет идентификаторы пакета для всех установленных приложений на вашем устройстве: ideviceinstaller -u device_udid -l

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...