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
- 使用 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
希望这有帮助!