代码之家  ›  专栏  ›  技术社区  ›  Suban Dhyako

如何使用Appium启用/禁用app权限?

  •  1
  • Suban Dhyako  · 技术社区  · 6 年前

    我的应用程序需要多个应用程序权限。我需要通过允许或拒绝不同的权限来检查我的应用程序的行为。如何从appium启用/禁用app权限来创建多个场景?

    例如,假设我的应用程序需要以下权限: 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 回复  |  直到 5 年前
        1
  •  7
  •   anne    5 年前

    自动授权权限 ".

    设置:

    所需的\u caps['autoGrantPermissions']=True

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

        2
  •  1
  •   Andris Akacenoks    5 年前

    一种解决方案是转到“设置”应用程序并在其中自动化场景。你可以通过提供bundle ID进入Settings应用程序(实际上,任何iOS系统应用程序)

    我使用的是ruby,但其他客户机的想法可能与此类似。

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

    您可以在此处找到其他捆绑ID https://emm.how/t/ios-11-list-of-default-apps-and-bundle-id-s/465 或使用命令行-这将返回设备上所有已安装应用程序的绑定ID: 设备ID

        3
  •  0
  •   Al Imran    6 年前

    根据您的需要,您不能从中控制权限对话框 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();
    
        4
  •  0
  •   Sujan Satpati    6 年前

    您应该正确调用应用程序包和应用程序功能。。。因此,当你使用你的应用程序时,然后将程序包和活动设置为你的应用程序,当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();
    
        5
  •  0
  •   shiv    5 年前

    在启动/初始化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自动化代码调用这些

    appium具有授予权限的功能:autoGrantPermissions Appium会自动确定应用程序需要哪些权限,并在安装时将这些权限授予应用程序。默认为false。如果noReset为真,则此功能不起作用。

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

        6
  •  0
  •   Suban Dhyako    4 年前

    我找到了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 revoke " + packageName +" android.permission.CAMERA";
     String revokeLocationPermission= "adb shell pm revoke " + packageName +" android.permission.ACCESS_FINE_LOCATION";
            try {
                Runtime.getRuntime().exec(grantCameraPermission);
                Runtime.getRuntime().exec(revokeLocationPermission);
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    

    这是名单 Android Permission