【问题标题】:Dismissing Android 6.0 permission required dialog in Selendroid automation test在 Selendroid 自动化测试中关闭需要 Android 6.0 权限的对话框
【发布时间】:2016-03-25 01:28:48
【问题描述】:

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

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

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

【问题讨论】:

  • 所以现在你的问题是当你尝试将一些数据保存到scard时,一些对话框弹出来并且你想要处理它?如果你按下对话框上的某个按钮,它会起作用吗?对于您的“可能的方式#3”,您到底想自动化什么?
  • 我要做的就是在每次对话框出现时都接受它。我曾尝试使用 Selendroid 来接受,但它们都没有奏效。 Selendroid 告诉我它找不到需要 SD 卡权限对话框的元素,可能的原因是 Selendroid 只能操作我的应用程序,但无法关闭由系统创建的对话框。当然,我可以毫无问题地手动关闭它。
  • 您可以使用 android uiautomator 轻松按下“接受”按钮或处理对话框。否则您可以使用adb shell input keyevent 导航并按下对话框上的按钮。
  • @Rilwan 谢谢你的信息!我将研究developer.android.com/intl/ja/tools/testing-support-library/… 和 ADB Shell Input 以了解如何克服这个问题,一旦我解决了我的方法(示例代码),我将把它放在这里! :D
  • 好~先试试吧!如果您被卡住了,请将其发布为另一个 qn '如何使用 adb shell 命令处理此对话框'。我会给出答案。

标签: android ui-automation android-6.0-marshmallow selendroid


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你正在寻找的设置是 prolly:

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

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

    【讨论】:

    • 这正是我在理解中提到的选项1。但是,不清除数据代表“我必须管理我的应用程序的最后一个活动”,这导致了其他问题,我放弃了它。现在我已将这些案例迁移到 Espresso。
    • 我实际上正在使用这篇文章中提到的 UIAutomator stackoverflow.com/questions/33929937/…
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2012-02-15
      相关资源
      最近更新 更多