Appium切换webview原理及异常session not created分( 二 )


2.架构
是 - 架构,就是用户操作的 Web UI 界面,负责接收用户操作指令,然后将操作指令发往浏览器内核或 Node.js 中进行处理,并将处理结果数据展示在 Web UI 上 。启动了两类服务,一种 HTTP 服务;另一种服务 。
HTTP 服务提供内核信息查询能力 。比如获取内核版本、获取调试页的列表、启动或关闭调试 。
服务提供与内核进行真实数据通信的能力,负责 Web UI 传递过来的所有操作指令的分发和处理,并将结果送回 Web UI 进行展示 。
下图展示出了的整体架构图,从左侧开发者通过 Web UI 的发起的操作命令,是怎么一步一步地将操作命令,传递到手机中的Core( Core 运行浏览器内核的应用,比如浏览器、 、 应用等)中执行的过程 。
平台巧妙地使用 ADB能力,解决了 PC 上的 WebUI 与手机中的内核的连接问题,轻松了实现了远程调试的能力 。
3.通信
(简称 CDP) 这组开放协议的推出,再一次将的实现,真正做到了跨平台 。CDP 本质就是一组 JSON 格式的数据封装协议,JSON 是轻量的文本交换协议,可以被任何平台任何语言进行解析 。
此协议包含两部分 HTTP 和 ,的 Web UI 将控制命令发往浏览器内核,其中的控制命令、参数以及返回值,都是通过 CDP 来进行封装 。命令的发送时,由 Web UI 进行封装后,通过发往浏览器内核 。接收到浏览器内核反馈回结果后,再按协议进行解包,分发给 Web UI 。
浏览器内核需要开启,PC和/的开启方式略有不同 。
PC启动时,增加一个启动参数 ---port=9222 , 这样就会侦听本地的端口,可以向 :9222 发起 HTTP /请求,即可获取中的数据 。
对于与略有差异,由于默认是不开启调试功能的,需要在客户端手动开启,才能启动。
// Android 4.4 以上 WebView 才真正使用 Blink 内核,所以需要在此版本及以上系统 。if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {WebView.setWebContentsDebuggingEnabled(true);}
此时/在手机内已启动了 ,但为了在 PC 上能够访问到,需要使用 ADB 工具的端口转发能力 。
ADB 端口转发您可以使用 forward 命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口 。以下示例设置了主机端口 6100 到设备端口 7100 的转发:adb forward tcp:6100 tcp:7100通过 forward 可以打通 PC 与 Android 设备之间的网络相互访问
/使用 unix建立的端,此的连接符为:
te 和 ote_分别为和的连接符 。的连接由于可能不同应用都使用了 ,所以采用了进程 ID(PID)作为后缀来区分 。
adb shell cat /proc/net/unix | grep "devtools_remote"0000000000000000: 00000002 00000000 00010000 0001 01 528176 @chrome_devtools_remote0000000000000000: 00000002 00000000 00010000 0001 01 276394 @webview_devtools_remote_23119
通过 ADB,将 PC 与设备访问打通,执行如下命令:
# 在 PC 上侦听 9222 端口,对 localhost:9222 的请求将会转发到 android 设备上的 webview_devtools_remote_23119 上adb forward tcp:9222 localabstract:webview_devtools_remote_23119
【Appium切换webview原理及异常session not created分】至此,就可以在 PC 上通过 9222 来访问设备中的调试页面了 。