2
4

2 回答 2

2

我不知道如何在 aws 之前的测试运行中使用 adb 来授予权限,但是......

另一种方法是使用 UiAutomator 处理系统对话框。此工具可与 Espresso 结合使用。

样本:

UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
UiObject button = device.findObject(new UiSelector().text("Allow"));
button.click();

必要的依赖:

androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'

我已经开始编写一个库,它应该使使用 espresso 和 uiautomator 的测试更加简单。这包括用于权限处理的工具。https://github.com/nenick/espresso-macchiato 查看 EspPermissionDialog 和 EspPermissionsTool

于 2016-05-14T16:10:14.273 回答
1
  • 使用 UIAutomator 是一种解决方法,但不推荐使用,因为这种方法与一种语言相关联,将另一个库添加到项目中只是为了破解,最糟糕的是,它会在所有必须处理弹出窗口的测试中产生大量冗余代码。
  • Espresso 有一种方法来处理权限,方法是添加一个包含您需要的所有权限的适当规则(用逗号分隔):

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

请参阅https://developer.android.com/reference/android/support/test/rule/GrantPermissionRule https://www.kotlindevelopment.com/runtime-permissions-espresso-done-right/

但实际上取决于所需的许可,一些用户报告说它不能按预期工作,并且已像 WRITE_EXTERNAL_STORAGE 一样发给谷歌(例如:https ://issuetracker.google.com/issues/64389280 )

  • 另一种方法是使用亚行授予您权利:

adb shell pm grant your.package.name android.permission.ACCESS_FINE_LOCATION

在此处查看我的答案,了解如何在测试之前在 espresso 中实施 adb 命令(它应该与 aws 农场兼容): https ://stackoverflow.com/a/52698720/10472007

希望这有帮助!

于 2018-10-08T09:47:47.833 回答