自动化工具 [收集帖] 各厂手机不能自动化的坑和解决方案

AppetizerIO · June 29, 2017 · Last by 我喜欢的K17 replied at March 10, 2020 · 8359 hits
本帖已被设为精华帖!

在用真机做自动回归、批量自动化测试、兼容性测试的时候因为各厂的定制遇到过很多不能自动化的坑,这个是个搜集帖,我会想到就加。抛砖引玉,我会定期从回复中截取更新的。

自动化安装 APK

小米

  • 首先一定要打开 开发者选项->USB安装,最好把 USB调试(安全设置)也开了,吐槽下居然要小米账号登录!!!
  • adb install的时候铁定弹框,有些机型的安全中心里有授权管理可以取消了 USB 安装管理,但是有些机型没有,通用方案是检测屏幕上是否有系统弹框 PackageInstallerActivity如果有,通过 uiautomator去点掉(@aizaimenghuangu

    pattern = re.compile("adb -s (.*?) +")
        search = pattern.search(cmd)
        oscmd = ''
        if search:
            serialname = search.groups()
            sysstr = platform.system()
            if (sysstr == "Windows"):
                oscmd = 'adb -s %s shell dumpsys activity|findstr mFocusedActivity|findstr PackageInstallerActivity' % str(serialname[0])
            elif (sysstr == "Linux"):
                oscmd = 'adb -s %s shell dumpsys activity|grep mFocusedActivity|grep PackageInstallerActivity' % str(serialname[0])
             else:
                print ("Other System tasks")
        # end by wsa 20160907
        while timeout:
    
            time.sleep(0.1)
    
            if cmd.find('install') >= 0:  # 小米手机安装提示未知的PC工具
                # root_logger.info(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) + ' 当前命令为 ' + cmd + '\n')
                if os.system(oscmd) == 0:
                    root_logger.info('发现安装提示,执行命令'+'adb -s %s shell uiautomator runtest TestDemo.jar -c Install > nul' % str(serialname[0]))
                    create_process('adb -s %s shell uiautomator runtest TestDemo.jar -c Install ' % str(serialname[0]))
    

    另外,既然是 python,也可以考虑用 Python 封装的 UIAutomator

  • 相关 stackoverflow 讨论

  • 或者 “刷到 MIUI 16 年 7 月前的版本”(@jojotester

Moto

Oppo

  • Color OS 3 以后,使用 adb install 安装需要输入 OPPO 账号。解决方法:OPPO 对市场上部分安卓市场开放安装不需要账号的权限。制作一个安卓 app,包名和有安装权限的某个市场相同,在 app 中吊起安装界面,可以成功回避安装限制。 @zhonglinlins
  • r9s: 每次拉取共享路径上最新的被测 apk 包运行自动化用例,但是发现在 oppo r9s 手机上每次安装被测 app 、Settings 、unlock 程序的时候会弹出密码输入框,而且需要手动点击 “安装” 按钮。 解决方案:使用 AccessibilityService 实现自动输入密码、点击安装按钮,步骤如下: @huangxiaojiao https://testerhome.com/topics/9468

自动化授权

<= 4.4 安装即授权,>=5.0 动态授权,adb pm grant有时有用,但是国内厂牌并不全部支持(继续吐槽!)

Oppo

  • Oppo 机型在 4.4 的年代(r7s)如果 APP 用到定位权限会强制弹框要求确认,解决办法:有一个 APP 叫安全中心: 安全中心->设置->权限隐私->权限监控

传送门

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 19 条回复 时间 点赞
思寒_seveniruby 将本帖设为了精华贴 29 Jun 22:26

小米得刷低版本的 MIUI16 年 7 月前的

jojotester 回复

唉,这种真心累觉不爱,已经收集,谢谢

AppetizerIO 关闭了讨论 30 Jun 15:42
AppetizerIO 重新开启了讨论 30 Jun 15:42

OPPO

color OS 3 以后,使用 adb install 安装需要输入 OPPO 账号。
解决方法:OPPO 对市场上部分安卓市场开放安装不需要账号的权限。制作一个安卓 app,包名和有安装权限的某个市场相同,在 app 中吊起安装界面,可以成功回避安装限制。

造福社区的帖子,赞一个!

JamesChung 回复

非常感谢,已搜集

😂 仔细想想我大金立(海外版)还是蛮贴心的。。。

楼主知道小米手机上的输入法:搜狗输入法小米版么?
这 tm 就是个流氓软件啊!禁用不了,卸载不了,切换成 Appium'输入法之后,一旦聚焦到录入框,自动切换回搜狗输入法小米版,严重影响自动化测试!
这个有木有解决方案?

water 回复

看看这个?如果成功了告诉一下分享给大家

所有手机的安装写个 uiautomator,然后自动化去点击或者输入。

AppetizerIO 回复

看看哪个?

AppetizerIO 回复

停用早就试过了,停用之后,还是会自启动~~所以才说是流氓软件!

重新看了,还就是第一个方案好用,提前安装,在安装的时候使用底层的 uiautomator 点掉出现的提示

不知道还有没有人看,目前在用 airtest 框架,自己的华为荣耀 V10,系统是 EMUI9.0(安卓 9),在跑自动化时失败了。看错误信息,似乎是因为输入法的问题,自己装了搜狗,但禁用搜狗之后,默认的百度输入法似乎也存在同样的问题。

以下是报错的部分 log:
airtest.core.error.AdbShellError: stdout[b''] stderr[b'\r\nException occurred while executing:\r\njava.lang.IllegalArgumentException: Unknown id: com.sohu.inputmethod.sogou/.SogouIME\r\n\tat com.android.server.InputMethodManagerService.setInputMethodEnabledLocked(InputMethodManagerService.java:4301)\r\n\tat com.android.server.HwInputMethodManagerService.setInputMethodEnabledLocked(HwInputMethodManagerService.java:460)\r\n\tat com.android.server.InputMethodManagerService.handleShellCommandEnableDisableInputMethod(InputMethodManagerService.java:5278)\r\n\tat com.android.server.InputMethodManagerService.access$1800(InputMethodManagerService.java:200)\r\n\tat com.android.server.InputMethodManagerService$ShellCommandImpl.onCommand(InputMethodManagerService.java:5069)\r\n\tat android.os.ShellCommand.exec(ShellCommand.java:103)\r\n\tat com.android.server.InputMethodManagerService.onShellCommand(InputMethodManagerService.java:5035)\r\n\tat android.os.Binder.shellCommand(Binder.java:642)\r\n\tat android.os.Binder.onTransact(Binder.java:540)\r\n\tat com.android.internal.view.IInputMethodManager$Stub.onTransact(IInputMethodManager.java:494)\r\n\tat com.android.server.InputMethodManagerService.onTransact(InputMethodManagerService.java:1601)\r\n\tat com.android.server.HwInputMethodManagerService.onTransact(HwInputMethodManagerService.java:239)\r\n\tat android.os.Binder.execTransact(Binder.java:739)\r\n']

后来发现似乎是因为 airtest 要用这个 Yosemite 的 apk,装了之后,在应用列表里没找到,反复安装之后,又一次卸载成功然后手动重装上,就好使了……

当然了,各种开发者模式啊,安全输入啊,都去掉了~

小米在开发者选项最下面关闭'MIUI 优化',关闭'显示安全警告'即可;
VIVO 用辅助工具可自动输入密码完成安装流程;
OPPO 用辅助工具可自动输入密码并确定,但无法点击到最后的安装按钮(检测不到那个控件,恶心),但结合或单独使用 airtest 图像识别均可以完成安装流程;

唐衡 回复

thx

唐衡 回复

感谢,小米 8 试用有效,安装无弹窗

这么好的帖子,感谢大佬

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up