2

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

从我目前的理解,这里是解决这一问题的可能途径:
1.添加“NORESET”标志告诉Selendroid不消灭当前的设置,但我不能找到它selendroid.io
2 。使用Appium(他们的文档说他们有Android的NoReset标志),但是这需要一些时间才能将我的代码从Selendroid移植到Appium。
移植完成后,我只能知道它是否有效。
3.谷歌提供的任何其他方式,但我无法找到它。

如果有人遇到过类似的问题并有一些信息可以与我分享,我将非常感谢您的帮助,谢谢。

+0

所以现在你的问题是,当您尝试保存一些数据SCARD,一些对话框弹出来了,你要处理呢?如果你按下对话框上的某个按钮,它会起作用吗?对于你的“可能的方式#3”,你到底想要自动化到底是什么? – Rilwan

+0

我想要做的就是在每次出现对话框时接受对话框。 我曾尝试使用Selendroid接受,但他们都没有工作。 Selendroid告诉我它找不到SD卡权限所需的对话框元素,可能的原因是Selendroid只能操纵我的App,但不能解开由System创建的对话框。 当然,我可以手动解雇它,没有任何问题。 – holy934

+0

你可以按下“接受”按钮或使用android uiautomator轻松处理对话框。或者你可以使用'adb shell input keyevent'来导航并按下对话框上的按钮。 – Rilwan

回答

0

ü正在寻找的设置是prolly:

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

这样ü将只需要一次给任何权限和OS以后将一直记得。

+0

这正是我在理解中提到的选项1。 但是,没有清除数据代表“我必须管理我的应用程序的最后一个活动”,这导致了其他问题,我放弃了。 现在我已将这些案件迁移到Espresso。 – holy934

+0

我实际上使用UIAutomator从这篇文章中提到 http://stackoverflow.com/questions/33929937/android-marshmallow-test-permissions-with-espresso – holy934

0

在阅读Android UIAutomator几天并评估我的代码之后,我认识到对于Selendroid本身来说,似乎无法操纵任何UI超出AUT(待测应用程序)。
另外,在我当前的项目中,从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"); 
0

实际上,你可以让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)