如何使用Appium启用/禁用应用程序权限?

时间:2018-09-06 05:03:55

标签: appium appium-ios appium-android

我的应用需要多应用许可。我需要通过允许或拒绝其他权限来检查我的应用程序的行为。如何从appium启用/禁用app权限以创建多个方案?

例如,假设我的应用需要权限:permission1permission2

scenario 1 = allow permission1 allow permission2

scenario 2 = allow permission1 deny permission2

scenario 3 = deny permission1 allow permission2

scenario 4 = deny permission1 deny permission2

7 个答案:

答案 0 :(得分:1)

一种解决方案是转到“设置”应用程序,并在其中自动实现方案。您可以通过提供捆绑包ID转到“设置”应用程序(实际上是任何iOS系统应用程序)。对于设置应用,它是 com.apple。首选项

我正在使用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这里找到其他捆绑ID 或使用命令行-这将返回设备上所有已安装应用的捆绑包ID:     ideviceinstaller -u device_udid -l <​​/ p>

答案 1 :(得分:1)

以上答案无法解决我的问题。我通过使用“ autoGrantPermissions ”的大写字母解决了这个问题。

设置:

desired_caps ['autoGrantPermissions'] =真

您将必须将noReset上限禁用为False,否则它将不起作用。 请参阅此处的参考: http://appium.io/docs/en/writing-running-appium/caps/

答案 2 :(得分:0)

根据您的需要,您无法从//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(); 控制权限对话框,因此应使用:

header Component

答案 3 :(得分:0)

您应该正确调用应用程序包和应用程序功能...因此,当您使用应用程序时,请将包和活动设置为您的应用程序,当android活动出现时,为本地android调用程序包和活动。 ..还请确保在完成权限后为您的应用设置软件包和活动...请找到以下代码:

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();

答案 4 :(得分:0)

  

我使用 adb shell 命令找到了适用于android的解决方案。

 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 Permission

的列表

答案 5 :(得分:0)

在启动/初始化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/

答案 6 :(得分:0)

对于那些刚开始使用 appium 和 python 并且想知道如何添加此功能的人,我的 conftest.py 文件如下所示:

我的版本:Python 3.9 Appium:1.21.0 pytest: 6.2.4

capabilities = {
  "platformName": "Android",
  "platformVersion": "11.0",
  "deviceName": "emulator-5554",
  "automationName": "Appium",
  "app": r"C:\Project\app-universal-release.apk",
  **'autoGrantPermissions':'true'**
}

当我正在开发一个积极的场景测试时,这对我有用。这不适用于阴性测试。为此,能力必须不具备上述条件。

结果:

所有弹窗要求(权限)都已经给定了。

常见的有:位置、文件夹、相机等