运行真机小米 MIX2 时候,发现居然不用特别处理 手动点击 “继续安装” android-unlock 了,然后仔细研究了下 permissionPatterns 以为是 NoSmoke 提供的 结果看了源码没有。
然后又去 wd.java API 里找 去 macaca-cli 里找都没找到,然后看了下 macaca server 日志,发现应该是 UIAutomatorWD 干的事。
permissionPatterns: '[\"继续安装\",\"下一步\",\"好\",\"允许\",\"确定\",\"我知道\"]'
而这一句,是在真机测试时来捕获系统权限安装弹窗,让 android-unlock 自动许可安装通过的一步。
是 macaca 的 Desired Capabilities 是最近一个版本新加的 在官方说明中 还未有。
这是个很重要的 参数。 在真机测试时。 真棒。底层解决了。
看了下 macaca server 的日志
发现
>> helper.js:176:12 [master] pid:25727 Using local app form /home/cmd/app/acp4.7p.apk
>> checking permissionPatterns: [\"继续安装\",\"下一步\",\"好\",\"允许\",\"确定\",\"我知道\"]
>> uiautomator-client.js:62:14 [master] pid:25727 INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.macaca.android.testing.UIAutomatorWD:
>> uiautomator-client.js:62:14 [master] pid:25727
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=MacacaTestRunner
INSTRUMENTATION_STATUS: class="com".macaca.android.testing.UIAutomatorWD
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
>> uiautomator-client.js:62:14 [master] pid:25727 INSTRUMENTATION_STATUS: stream=
UIAutomatorWD->http://localhost:9002<-UIAutomatorWD
INSTRUMENTATION_STATUS_CODE: 0
>> UIAutomatorWD http server ready
>> macaca-android.js:303:10 [master] pid:25727 start app with: {"package":"com.sinacp.ggaicai","activity":""}
>> responseHandler.js:49:14 [master] pid:25727 Send HTTP Respone to Client[2018-01-03 14:28:04]: {"sessionId":"41c53e4f-4ae4-4762-8a08-867edd515f94","status":0,"value":"{\"platformName\":\"android\",\"app\":\"/home/cmd/app/acp4.7p.apk\",\"packages\":\"com.sinacp.ggaicai\",\"activity\":\"com.aicai.pluginhost.activity.MainActivity\",\"isWaitActivity\":true,\"reuse\":3,\"udid\":45806625,\"permissionPatterns\":\"[\\\\\\\"继续安装\\\\\\\",\\\\\\\"下一步\\\\\\\",\\\\\\\"好\\\\\\\",\\\\\\\"允许\\\\\\\",\\\\\\\"确定\\\\\\\",\\\\\\\"我知道\\\\\\\"]\"}"}
是 UIAutomatorWD 负责发的这个 responseHandler ,就去找到 UIAutomatorWD 项目 发现最近 NoSmoke 的作者提交了 permissionPatterns 相关
https://github.com/macacajs/UIAutomatorWD/commit/dee4dad116995f956cdfa9fc7fbca68da8912ac3
论坛和群里 经常有问安卓系统包括 appium 的 在真机测试时都是需要先权限安装 Unlock 和 Appium Settings
怎么自动化的解决系统安装弹窗的问题,也有不少方案源码。
附上看到的帖子和内容
https://testerhome.com/topics/4481
https://testerhome.com/topics/7816
https://testerhome.com/topics/3800
比较可行的是改源码 但可能需要重编译,给后续升级维护带来不便。
另一种是 AccessibilityService 但帖子作者给的是 java 源码,也不够通用。
我大致看了下
NoSmoke 的作者提交了 permissionPatterns 相关
https://github.com/macacajs/UIAutomatorWD/commit/dee4dad116995f956cdfa9fc7fbca68da8912ac3
感觉他的方案是可以通用的,而且是放在 macaca 的 Desired Capabilities 参数中。
所以 想请坛子里的各位源码调试大神,将 macaca 的该 permissionPatterns 参数功能 转写进 appium 的 Desired Capabilities 参数中支持。这样再提交给 appium 官方融合进去,
这样就通用了。