在 Selendroid 自动化测试中关闭 Android 6.0 权限要求对话框

Dismissing Android 6.0 permission required dialog in Selendroid automation test

我在Google / Whosebug中搜索了很多次寻求答案。
最初(Android 6.0 之前)我的自动化代码 运行 很顺利,但现在一切都被需要权限的对话框阻止了。
我的应用程序需要将数据保存到 SD 卡中,我发现我无法使用 Selendroid 自动化来关闭在 运行 时间测试期间由 com.android.packageInstaller 进程创建的 SD 卡权限所需对话框。
我知道我可以手动预配置我的应用程序的权限,但每次我用 Jenkins 重新安装我的应用程序,或启动 Selendroid 的新会话来测试我的应用程序时,所有配置都会被清除。

根据我目前的理解,以下是解决此问题的可能方法:
1. 添加 "NoReset" 标志告诉 Selendroid 没有清除当前设置,但我在 selendroid.io
上找不到它 2. 改用 Appium(他们的文档说他们有 Android 的 NoReset 标志),但这需要一些时间才能将我的代码从 Selendroid 移植到 Appium。
而且能不能用,只能等移植完了才知道
3. Google提供的任何其他方式,但我找不到它。

如果有遇到过类似问题并有相关信息的朋友可以分享给我,非常感谢您的帮助,谢谢。

在阅读了 Android UIAutomator 几天并评估了我的代码之后,我意识到对于 Selendroid 本身,似乎无法从 AUT 中操纵任何 UI(应用程序测试中)。
此外,在我当前的项目中,从 Selendroid 或 Google UIAutomator 切换到 Appium 需要更长的时间。

最简单可靠的方法是发送[ADB shell 输入 tap , ] 以点击 X 和 Y 的坐标,因为我只维护很少的设备 = 分辨率类型。

SelendroidDriver driver = new SelendroidDriver(new URL("http://localhost:4444/wd/hub"), caps);  
...
driver.getAdbConnection().executeShellCommand("input tap 1100 1100");  

你正在寻找的设置很可能是:

SelendroidConfiguration config = new SelendroidConfiguration();
config.setNoClearData(true);

这样,您只需授予任何权限一次,OS 将永远记住。

其实你可以让Selendroid 运行 adb命令自动添加权限:

List <String> commands = new ArrayList<>();
commands.add("shell pm grant com.example.yourapp android.permission.READ_EXTERNAL_STORAGE")

SelendroidCapabilities capabilities = new SelendroidCapabilities();
capabilities.setPreSessionAdbCommands(commands)