上述 Web 端的截图,Sonic 实现下面3个步骤:
1、通过 adb 转发 Android 真机的 WebView 进程端口,使其可以被外部访问。
2、启动一个无头 Chrome 进程。
- a.使用 Chrome inspector 访问被转发的真机 WebView 端口。b.Chrome 进程通过 9222 远程调试端口对外暴露。
3、通过 Sonic 的 Web 端访问 Chrome 进程的 9222 端口,即可实现在 Web 端查看真机小程序 WebView 的能力。
在 Agent 端, Sonic 是把第2步的 Chrome 换成了 Selenium 的 ChromeDriver ,同样实现了对 webview 的自动化操作。
3.2 可视化任务脚本在上面的关键能力基础上, Sonic 还提供了编写可视化任务的能力。
Sonic 可视化用例(局部):
该 Sonic 可视化任务的底层原理,是对真机执行封装过的 Appium / Selenium 自动化操作。
经查阅 Sonic 源码可知,核心流程中的"获取截图"能力,最终会调用 Agent 上的 ScreenShot 方法。
1、Sonic 会在在安卓手机上安装 appium-uiautomator2-server ,一个安卓自动化工具。
2、在 Agent 端内部, Sonic 实现了一个 androidDriver,通过它可以启动、连接、调用手机上的 appium-uiautomator2-server。
3、在 Agent 端调用 androidDriver 的截图 screenshot 方法,并保存截图。
我们编写的截图能力的任务逻辑如下:
通过 Sonic 提供的能力,依次打开微信、打开小程序,然后切换到小程序所使用的 WebView。拿到 Webview 之后,可以使用 JS 能力向下滑动页面。
然后使用 Sonic 提供的截图能力,多次滑动页面,对真机截图,最后存入对象存储平台(COS)。
3.3 任务调度工具在 Sonic 平台上完成了某个小程序的截图任务之后,我们需要做一个任务调度工具。因为我们有很多小程序需要进行截图。
Sonic 提供了丰富的 REST API, 我们通过 API 的方式可以控制多个任务。
任务调度工具的时序图如下: