Android webview测试原理
注意:
1、adb链接MuMu模拟器:adb connect 127.0.0.1:7555
2、adb链接夜神模拟器:adb connect 127.0.0.1:62001
webView测试
webview就是App内嵌的H5页面
官方文档:https://developer.android.com/reference/android/webkit/WebView
官方文档:https://developer.android.com/guide/webapps
官网文档:https://developer.android.com/guide/webapps/webview#java(向应用中添加 WebView)
要在 WebView 中加载网页,请使用 loadUrl()。例如:
WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadUrl("http://www.example.com");
模拟器上的测试(推荐使用MuMu模拟器)
- webview控件会被映射为原生控件,类型为View,其中的文本内容会变成content-desc或者text
- 6.0会把webview中的控件变成一个带有content-desc属性的View控件
- 9.0会把webview中的控件变成一个带有text属性的View控件
MuMu模拟器上Android版本6.0.1
真机上Android版本9
真机
- 如果app未开启webview的调试属性,是无法分析内部的控件的
- 个别手机可能会默认打开此属性,所以默认也能访问到h5内部的控件
- 如果还是访问不到,检查webview的调试属性是否开启,此时需要让研发配合打开webview的调试属性
例如:华为手机
webview测试用例
- 不需要css定位:直接使用accessibility-id或者xpath定位就可以直接定位到
- 需要css定位以及其他的js执行功能:contexts api
- 注释:意思是如果用原生api可以定位到所有元素,就可以不用这里webview了,主要看手机或模拟器是否支持
#切换context
self.driver.switch_to.context(self.driver.contexts[1])
webview技术原理
webview能否被调试
# 查看所有开启的进程并过滤已开启的App
localhost:~ seveniruby$ adb shell cat /proc/net/unix | grep webview
0000008880000000: 00000002 00000000 00010000 0001 01 2545836 @webview_devtools_remote_32073
0000008880000000: 08000002 00000800 00010000 0001 01 9455057 @webview_devtools_remote_25324# 查看进程
adb shell ps 25324adb -s VED7N18403003958 forward tcp:7777 localabstract:webview_devtools_remote_32073
adb forward --list
curl http://127.0.0.1:7777/json/version
adb forward命令
forward --list 列出所有正向套接字连接forward [--no-rebind] LOCAL REMOTEforward socket connection using:tcp:<port> (<local> may be "tcp:0" to pick any open port)localabstract:<unix domain socket name>localreserved:<unix domain socket name>localfilesystem:<unix domain socket name>dev:<character device name>jdwp:<process pid> (remote only)vsock:<CID>:<port> (remote only)acceptfd:<fd> (listen only)forward --remove LOCAL 删除特定的正向套接字连接forward --remove-all 删除所有正向套接字连接
真实操作案例:
注意:其实不用使用下面这种方法也可以实现调试
参考:https://blog.csdn.net/DDJ_TEST/article/details/120767305
参考:https://blog.csdn.net/DDJ_TEST/article/details/120760836
地址:chrome://inspect/#devices
真机
MuMu模拟器
开启需要的App内嵌的H5页面
C:\Users\shenyf>adb shell "cat /proc/net/unix | grep webview"
0000000000000000: 00000002 00000000 00010000 0001 01 90651 @webview_devtools_remote_8183C:\Users\shenyf>adb forward tcp:7777 localabstract:webview_devtools_remote_8183
7777C:\Users\shenyf>adb forward --list
emulator-5554 tcp:7777 localabstract:webview_devtools_remote_8183
地址:127.0.0.1:7777
使用chrome的devtools远程调试协议
官方文档:https://developer.chrome.com/docs/devtools/remote-debugging/webviews/
官方文档:https://developer.chrome.com/docs/devtools/remote-debugging/
官方文档:https://chromedevtools.github.io/devtools-protocol/
webview与浏览器的通讯,chrome可以控制webview
地址:http://127.0.0.1:7777/json/version
chrome remote debug
{"Android-Package": "com.bs.finance",
"Browser": "Chrome/69.0.3497.100",
"Protocol-Version": "1.3",
"User-Agent": "Mozilla/5.0 (Linux; Android 9; AOSP on IA Emulator Build/PSR1.180720.122; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36",
"V8-Version": "6.9.427.23",
"WebKit-Version": "537.36 (@8920e690dd011895672947112477d10d5c8afb09)",
"webSocketDebuggerUrl": "ws://127.0.0.1:7777/devtools/browser"
}
在App打开一个H5页面
http://127.0.0.1:7777/json/list
[{"description": "{\"attached\":true,\"empty\":false,\"height\":1890,\"screenX\":0,\"screenY\":258,\"visible\":true,\"width\":1080}","devtoolsFrontendUrl": "http://chrome-devtools-frontend.appspot.com/serve_rev/@8920e690dd011895672947112477d10d5c8afb09/inspector.html?ws=127.0.0.1:7777/devtools/page/1EA4D75CDFD3C8A56BCD73299017A9FB","id": "1EA4D75CDFD3C8A56BCD73299017A9FB","title": "","type": "page","url": "https://app-test1.bicai365.com/products/#/prdDoubleBuy?helpCenterCode=BC_GROUP_BUY&h5HandleRightItems=1&ID=2000001750&RATE_ID=731007623&hideOption=1&ORG_ID=999-2000001750&showRightShare=1&extendInfo=&entrySource=1&inviteId=27757&member_status=null","webSocketDebuggerUrl": "ws://127.0.0.1:7777/devtools/page/1EA4D75CDFD3C8A56BCD73299017A9FB"}
]
目前:Edge浏览器+MuMu模拟器,只能调试出H5页面,app原生掉不出来
注意:在这一步chrome浏览器出不来页面
微信小程序测试
Android webview测试原理相关推荐
- android webview测试
多架构支持 纯webview 纯webview测试(只测试浏览器)的环境准备 手机端 被测浏览器:(不可以是第三方浏览器)safari for ios and chrome,chromium,or b ...
- Android测试原理(三)——使用Eclipse的ADT进行测试
原文链接:http://developer.android.com/tools/testing/testing_eclipse.html 1.使用Eclipse的ADT进行测试 这次的主题介绍了怎么使 ...
- Android测试原理(二)
2.3. The Testing API(测试API) Android的测试API是基于JUnitAPI和扩展的instrumentation 框架以及特定的Android测试类. ...
- Android测试原理概述(一)
翻译来源:http://developer.android.com/tools/testing/testing_android.html 1. Testing http://developer.a ...
- Android Webview历史高危漏洞与攻击面分析
文章目录 前言 WebView基础 极简Demo程序 JS调用Android 加载远程HTML 接口攻击场景 漏洞示例程序 本地攻击程序 url白名单校验 代码执行漏洞 JAVA反射机制 历史漏洞PO ...
- 如何设计一个优雅健壮的Android WebView?(下
nativeReady = false; var jsoncommand = JSON.stringify(command); var _temp = prompt(jsoncommand,''); ...
- android webview 字体 系统字体大小,【转】android webview设置内容的字体大小
Enum for specifying the text size. SMALLEST is 50% SMALLER is 75% NORMAL is 100% LARGER is 150% LARG ...
- Android Webview 漏洞复现
Android Webview 漏洞复现 前言 触发条件 漏洞原理 漏洞复现 1. 运行环境 2.1 webview介绍 2.2 漏洞核心代码 2.3 JS攻击核心代码 2.4 效果展示 总结 前言 ...
- Android 插件化原理学习 —— Hook 机制之动态代理
前言 为了实现 App 的快速迭代更新,基于 H5 Hybrid 的解决方案有很多,由于 webview 本身的性能问题,也随之出现了很多基于 JS 引擎实现的原生渲染的方案,例如 React Nat ...
- Android Webview H5 秒开方案实现
本文首发于微信公众号「玉刚说」 原文链接:Android Webview H5 秒开方案实现 前言 现在许多app都嵌入了H5页面, 然而WebView加载速度慢这个问题却一直影响着用户的体验, 所以 ...
最新文章
- HDU 2084 数塔 DP
- canva五角星空html,【Canvas】canva实例-星空、日出的效果
- rabbitmq 延迟队列_Delayed Message 插件实现 RabbitMQ 延迟队列
- Laravel核心解读--观察者模式
- 八年级信息技术认识计算机网络,初二信息技术课名称:认识计算机网络.doc
- python读取csv文件_Hello,Python!小鲸教你Python之文件读取
- spss方差分析_交叉设计及SPSS多因素方差分析
- Object常用方法
- php dsn port,PHP的InfluxDB客户端库使用
- C语言 实现学生管理系统(手把手教学)
- 火狐浏览器不弹出窗口_Firefox选项卡的Vista样式弹出窗口预览
- cesium绘制网格_Cesium (五) 栅格图层
- 现代Web发展趋势和前沿技术综述
- 获取指定文件夹下所有的同种类型文档的名字(Python)
- html直接使用marked.js解析marked文档
- antv G6 + react umi(vue,ng) 实现节点红点(badges)
- 【狂神说】MySQL笔记
- “数字炸弹“——练习Python基础知识的小游戏【文末源码地址】
- 数据中心机房建设有哪些关键问题要考虑?
- Star-Transformer
热门文章
- 关于uvm_mem model的使用
- TLF35584 SPI
- 8个免费下载无损歌曲的网站,值得收藏
- Codeforces 382B Number Busters(数论)
- 杂谈之非技术工作能力
- 基于ARM-Linux的点菜系统
- python3.5从零开始学pdf_Python 3.5从零开始学 (刘宇宙 著) 完整pdf扫描版[41MB]
- R语言信用风险回归模型中交互作用的分析及可视化
- 集合arrayList,HashMap,HashSet的几个小练习
- java如何导入葡萄酒数据集包,如何将具有三个级别的类转换为二进制'0',并在葡萄酒数据集的插入符号中使用glm...