【问题标题】:Granting Bluetooth permissions in Espresso for Android 12在 Espresso for Android 12 中授予蓝牙权限
【发布时间】:2022-10-06 14:02:06
【问题描述】:

我在一个遗留项目上工作。该项目使用低功耗蓝牙与设备连接。当然,我迁移了项目以使用 AndroidX 库。前段时间我开始用 Espresso 编写测试,因为它是测试 Ble 接口的唯一方法,因为 Android Emulator 不支持蓝牙仿真。

该应用程序面向 Android 11,并与 Android 6 之前的早期版本兼容。

当然,我必须使用 JUnit4 规则授予权限以避免权限弹出:

@Rule public GrantPermissionRule permissionRule = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION);

两周前,我的公司决定以 Android 12 为目标。所以我将规则替换为:

@Rule public GrantPermissionRule permissionRule = GrantPermissionRule.grant(
        android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.BLUETOOTH_CONNECT);

不幸的是,这条规则没有授予 Android 12 的权限,应用程序会弹出权限,并且我的所有测试(以前运行良好)都会中断。

我还在标记为@Before 的函数中尝试了这个:

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand(
                \"pm grant \" + ApplicationProvider.getApplicationContext().getPackageName()
                        + \" android.permission.BLUETOOTH_SCAN  android.permission.BLUETOOTH_CONNECT\");

这些解决方案都没有避免弹出权限,所以我们所有的蓝牙测试都会刹车。

有谁知道如何授予针对 Android 12 的 Espresso 测试的权限?

提前致谢。

    标签: android-espresso android-12


    【解决方案1】:

    一段时间后寻找更优雅的解决方案,我可以关闭权限弹出窗口的唯一方法是通过以下两种方式之一访问接受按钮:

    onView(withId(android.R.id.button1)).perform(click());
    

    或者

    (withText(android.R.string.ok)).perform(click());
    

    这不是我想要的解决方案,但它有效。

    【讨论】:

      【解决方案2】:

      根据开发者文档GrantPermissionRuledeprecated,建议迁移到AndroidX。

      【讨论】:

      • 请在给出错误答案之前搜索更多信息。您发布了一个指向已弃用类的链接,而没有检查 AndroidX 库是否有一个具有相同名称和相同目标的类:developer.android.com/reference/androidx/test/rule/…。当然,当我开始在遗留项目中工作时,我迁移到了 AndroidX。
      • 我认为您的问题“我从事遗留项目”的开头误导了我的回答。您已经将项目迁移到 AndroidX 这一事实是您的问题中要包含的重要信息。
      • 我认为该应用针对 Android 11 的事实应该足够了。无论如何,我编辑问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 2022-11-11
      • 2021-07-19
      • 2021-12-21
      • 2022-06-28
      • 2023-02-10
      • 2023-03-21
      相关资源
      最近更新 更多