You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Appium绕过com.android.permissioncontroller权限审核界面?

解决方案:Appium Android权限弹窗卡住问题

针对你遇到的权限审核界面无法操作的问题,核心原因是无需新建驱动实例,应使用当前驱动直接处理系统弹窗;同时优化capabilities配置来自动授权权限,以下是具体解决步骤:

1. 优化Capabilities配置,启用自动权限授权

首先在初始化驱动时添加自动授权相关配置,确保Appium尽可能自动处理权限请求:

public static AppiumDriver options() throws MalformedURLException, URISyntaxException {
    File appDir = new File("src");
    File app = new File(appDir, "ApiDemos-debug.apk");
    URL localURL = new URI("http://127.0.0.1:4723/wd/hub").toURL();

    UiAutomator2Options capabilities = new UiAutomator2Options();
    capabilities.setPlatformName("Android");
    capabilities.setDeviceName("Emulator");
    capabilities.setApp(app.getAbsolutePath());
    
    // 自动授予应用请求的所有权限
    capabilities.setAutoGrantPermissions(true);
    // 自动接受系统级弹窗(如权限提示)
    capabilities.setAutoAcceptAlerts(true);
    // 延长等待时间,适配Android 13弹窗加载
    capabilities.setNewCommandTimeout(Duration.ofSeconds(30));
    
    AppiumDriver driver = new AppiumDriver(localURL, capabilities);
    return driver;
}

2. 使用现有驱动直接处理权限弹窗

删除allowAppPermissionController方法,无需新建驱动,直接在主逻辑中用当前驱动定位并点击权限弹窗按钮:

public static void main(String[] args) throws MalformedURLException, URISyntaxException, InterruptedException {
    AppiumDriver driver = options();
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    
    // 处理权限弹窗:用UiAutomator定位更可靠(适配Android 13控件)
    try {
        driver.findElement(AppiumBy.androidUIAutomator("new UiSelector().text(\"Continue\")")).click();
        System.out.println("权限弹窗已处理");
    } catch (NoSuchElementException e) {
        // 弹窗未出现或已被自动处理,跳过
        System.out.println("无权限弹窗需处理");
    }
    
    // 后续自动化操作示例
    // driver.findElement(AppiumBy.accessibilityId("Accessibility")).click();
    
    // 最后关闭驱动
    // driver.quit();
}

3. 关键问题说明

  • 为何新建驱动无效:每个Appium Session对应一个设备连接实例,新建驱动会尝试创建新Session,但当前设备已被第一个Session占用,导致报错;且权限弹窗属于当前Session的上下文,无需重新初始化驱动。
  • autoGrantPermissions不生效原因:Android 13的权限弹窗逻辑有更新,部分特殊权限(如通知权限)无法被自动授权,需手动补充处理;同时要确保设备上的Appium Settings应用正常运行。
  • 确认权限界面的包名/Activity:如果需要手动切换到权限应用(极少场景),可通过adb shell dumpsys window | grep mCurrentFocus命令获取当前界面的包名和Activity,替换你代码中的PermissionControllerPackage和PermissionControllerActivity值。

4. 备选方案:手动切换应用(如需)

如果权限弹窗属于独立的系统应用界面,可使用startActivity切换应用,无需新建驱动:

// 切换到权限控制器应用
driver.startActivity(new Activity("com.google.android.permissioncontroller", 
                                "com.android.permissioncontroller.permission.ui.ReviewPermissionsActivity"));
// 点击Continue按钮
driver.findElement(AppiumBy.androidUIAutomator("new UiSelector().text(\"Continue\")")).click();
// 切回ApiDemos应用
driver.startActivity(new Activity("io.appium.android.apis", "io.appium.android.apis.ApiDemos"));

内容的提问来源于stack exchange,提问作者michel reyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:23:08