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

二、切换失败,日志分析
adb 发送命令 。在该命令之后,收到“adb init 会话请求失败” 。
[Chromedriver] [STDERR] [1688525498.977][DEBUG]: Sending adb command: host-serial:CLB7N18622009475:forward:tcp:0;localabstract:webview_devtools_remote_9194[Chromedriver] [STDERR] [1688525498.978][DEBUG]: ADB server responded with "OKAYOKAY" instead of "OKAY".[Chromedriver] [STDERR] [1688525498.978][DEBUG]: Received adb response: 56879[Chromedriver] [STDERR] [1688525498.979][DEBUG]: DevTools HTTP Request: http://localhost:56879/json/version[Chromedriver] Webview version: 'Chrome/89.0.4389.72'[Chromedriver] [STDERR] [1688525499.287][DEBUG]: DevTools HTTP Response: {[Chromedriver] [STDERR]"Android-Package": "",[Chromedriver] [STDERR]"Browser": "Chrome/89.0.4389.72",[Chromedriver] [STDERR]"Protocol-Version": "1.3",[Chromedriver] [STDERR]"User-Agent": "Mozilla/5.0 (Linux; Android 10; EML-AL00 Build/HUAWEIEML-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/046247 Mobile Safari/537.36",[Chromedriver] [STDERR]"V8-Version": "8.9.255.28",[Chromedriver] [STDERR]"WebKit-Version": "537.36 (@3f345f156bfd157bd1bea06310e55f3fb2490359)",[Chromedriver] [STDERR]"webSocketDebuggerUrl": "ws://localhost:56879/devtools/browser"[Chromedriver] [STDERR] }[Chromedriver] [STDERR] [1688525499.291][DEBUG]: Sending adb command: host-serial:CLB7N18622009475:killforward:tcp:56879[Chromedriver] [STDERR] [1688525499.293][DEBUG]: ADB server responded with "OKAYOKAY" instead of "OKAY".[Chromedriver] [STDERR] [1688525499.293][DEBUG]: Received adb response:[WD Proxy] Got response with status 500: {"value":{"error":"session not created","message":"session not created: please close '' and try again","stacktrace":"Backtrace:\n\tOrdinal0 [0x010AE7D3+124883]\n\tOrdinal0 [0x010AE7B1+124849]\n\tGetHandleVerifier [0x012F8688+193832]\n\tGetHandleVerifier [0x013136A3+304451]\n\tGetHandleVerifier [0x0130E9D0+284784]\n\tGetHandleVerifier [0x0130E035+282325]\n\tGetHandleVerifier [0x01334A90+440624]\n\tGetHandleVerifier [0x013347FC+439964]\n\tGetHandleVerifier [0x0133154B+426987]\n\tGetHandleVerifier [0x01314FFD+310941]\n\tGetHandleVerifier [0x01315D8E+314414]\n\tGetHandleVerifier [0x01315D19+314297]\n\tGetHandleVerifier
" not :close '' and try again"这个错误是如何出现的?通过分析,如果客户端的的 名称与选项的包名称不匹配,则会抛出会话未创建错误 。再看日志"-": "",获取到的是空字符串,这就是导致创建失败的原因 。最后找开发同学解决获取失败问题就顺利解决了 。
const BrowserInfo* browser_info = client->browser_info();std::cout("%s", browser_info->android_package.c_str())if (browser_info->is_android &&browser_info->android_package != capabilities->android_package) {return Status(kSessionNotCreated,base::StringPrintf("please close '%s' and try again",browser_info->android_package.c_str()));}
三、实现原理 1.发展由来
在 IE 时代编写代码时的调试手段,主要靠 .alert() 或将调试信息输出到网页上来分析逻辑 bug 。2006 年 1 月份,Apple 的团队释放出第一版本的 Web ,此版本功能还比较简朴,仅可以查看 DOM 节点的继承关系,节点所应用了哪些 CSS 的规则 。同时开源阵营出现一款的插件 ,专注于 Web 开发的调试,奠定了现代的 Web UI 的布局 。早期版本就支持了的调试,CSS Box 模型可视化展示,支持 HTTP的性能分析等优秀特性,后来的参考了此插件的功能和产品定位 。此时迎来了 团队,基于加入浏览器研发,同时开发者工具这方面,吸收多款调试工具的优秀功能,推出了今天的主角。
此时开始超越同类工具,支持了远程真机调试 。是多进程架构,DOM 和是运行在子进程中的,所以的底层实现,已与同类产品完全不同 。的架构师将实现架构调成在 - 模式,这个架构让远程真机调试成为可能 。为了方便网络数据传输,设计出了一套数据封装协议(CDP),接下来的几年,这个架构的调整在开源世界大放异彩 。