Appium 安卓 7.0 设备上,允许获取权限后如何继续操作 APP

MBF · 2017年06月23日 · 最后由 MBF 回复于 2017年06月30日 · 2603 次阅读

发现在安卓 7.0 上对权限的管理变严格了,在用 appium 写自动化 case 的时候发现,安卓 7.0 上在 APP 第一次安装后,在进行权限相关操作时会询问用户是否给予相关权限。
弹出权限窗口时可以用过基本的定位元素进行点击允许的操作,但是点击后就无法继续对 APP 进行操作了,请问有什么办法可以在允许权限后继续 app 的操作?
不想绕过请求权限这个步骤,因为这个地方也会产生相关的流程 case

共收到 18 条回复 时间 点赞

修改下 appium 在安装的时候 用 grant all

MBF #19 · 2017年06月23日 Author
恒温 回复

是指对 appium 进行一下源码进行改动么 ?

“但是点击后就无法继续对 APP 进行操作了”,比如?
最好 show me the code

恒温 回复

grant all 是神马

bauul 回复
adb install [-lrtsdg] <file>
                             - push this package file to the device and install it
                               (-l: forward lock application)
                               (-r: replace existing application)
                               (-t: allow test packages)
                               (-s: install application on sdcard)
                               (-d: allow version code downgrade (debuggable packages only))
                               (-g: grant all runtime permissions)

MBF #15 · 2017年06月26日 Author
public void plus()throws InterruptedException {


    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  
    driver.findElementById("com. :id/btnLoginSelection").click();
    driver.findElementById("com. :id/btnLoginPhone").click();
    driver.findElementById("com. :id/positiveButton").click();
    driver.findElementById("com.android.packageinstaller:id/permission_allow_button").click();

在进行最后一条命令后,即点击屏幕中允许权限对话框之后便无法对 APP 继续进行操作了

后续操作的代码呢
目前这些没看出有什么问题

恒温 回复

你好,想问下这是要在 bootstrap 里面改吗?对源码不熟悉,翻了下还是没找到要修改的位置

雪怪 回复

应该是 appium 安装应用的脚本

appium 我们这边的做法是把 appium 所需要安装的东西全部拿出来,自己写了个 uiautomator 脚本来点击的允许安装或者授权安装,并把 appium 所有 adb 操作都注释掉,麻烦的就是需要针对不同手机需要多做几个不同的字段判断。目前大多数手机都能安装相关的应用。

恒温 回复

刚刚在 apk-utils.js 里面找到了🎉

apkUtilsMethods.install = function callee$0$0(apk) {
  var replace = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];
  var timeout = arguments.length <= 2 || arguments[2] === undefined ? 60000 : arguments[2];
  return _regeneratorRuntime.async(function callee$0$0$(context$1$0) {
    while (1) switch (context$1$0.prev = context$1$0.next) {
      case 0:
        if (!replace) {
          context$1$0.next = 5;
          break;
        }

        context$1$0.next = 3;
        return _regeneratorRuntime.awrap(this.adbExec(['install', '-r', apk], { timeout: timeout }));

      case 3:
        context$1$0.next = 15;
        break;

      case 5:
        context$1$0.prev = 5;
        context$1$0.next = 8;
        return _regeneratorRuntime.awrap(this.adbExec(['install', apk], { timeout: timeout }));

      case 8:
        context$1$0.next = 15;
        break;

      case 10:
        context$1$0.prev = 10;
        context$1$0.t0 = context$1$0['catch'](5);

        if (!(context$1$0.t0.message.indexOf('INSTALL_FAILED_ALREADY_EXISTS') === -1)) {
          context$1$0.next = 14;
          break;
        }

        throw context$1$0.t0;

      case 14:
        _loggerJs2['default'].debug('Application \'' + apk + '\' already installed. Continuing.');

      case 15:
      case 'end':
        return context$1$0.stop();
    }
  }, null, this, [[5, 10]]);
};
MBF #9 · 2017年06月27日 Author
driver.findElementById("com. :id/id_reg_phone").sendKeys("1340000000");

接下来是这个操作

依然看不出问题来,尝试升级 appium 到最新,然后用 uiautomator2

MBF #7 · 2017年06月28日 Author

appium 用的客户端 版本是 1.6.5
uiautomator 就用 android sdk 自带的工具 uiautomator2 是?
同样的元素定位与操作 之前 6.0 都 OK 的 到了 7.0 出现权限确认,允许权限后就无法继续操作了

capabilities.setCapability("automationName","uiautomator2")

MBF #5 · 2017年06月29日 Author

用了 uiautomator2 后 在允许权限后,可以继续操作 APP 了 但是又有出现新的问题
APP 在进行操作后 会突然闪退 试过两台 7.0 设备 均在不同操作点出现闪退在 appium log 上是这样表现的

抓 log,报 bug 给 appium

MBF #3 · 2017年06月30日 Author

好谢谢回答

MBF 关闭了讨论 06月30日 16:36
Jason [该话题已被删除] 中提及了此贴 05月08日 13:46
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册