写在前面:
需提前开启微信的webview,并保证chromedriver可以正常启动
很多CDP测试都是用的PC端,开启PC端的chrome,这里主要说一下如何与webview建立ws连接
1.启动chromedriver
chromedriver --url-base=wd/hub --port=8000 --adb-port=5037
启动后出现类似如下日志:chromedriver版本不同 日志内容会不同
Starting ChromeDriver 2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363) on port 8000
Only local connections are allowed.
2.连接webview,生成websocket地址
手机微信开启,页面停留在webview页面,确定当前在chrome浏览器中chrome://inspect/#devices可以找到对应的webview页面
向chromedriver发送session
http://127.0.0.1:8000/wd/hub/session//POST发送 8000为chromedriver启动端口
{
"desiredCapabilities":
{
"chromeOptions":
{
"androidUseRunningApp": true,
"androidDeviceSerial": "设备id",
"androidPackage": "com.tencent.mm",//微信package
"androidProcess": "com.tencent.mm:tools"//微信Proccess
}
}
}
3.获取websocket地址
adb -P 5037 -s 设备id forward --list
可以得到
[设备id] tcp:52418 localabstract:webview_devtools_remote_2327
浏览器中打开
http://localhost:52418/json/list #52418取自上面的端口号 结果即可得到该页面的ws地址
此时我们就可以通过CDP向webview页面注入JS了
在python文件中通过websocket向webview传递js
import websocket
import json
conn = websocket.create_connection("ws://localhost:52418/devtools/page/AFB76F51539FCDBE2459D0B665CAAF51")
conn.send(json.dumps({"id": 1, "method": "Runtime.evaluate", "params": {"expression": "window.location.toString()"}}))
data = conn.recv()
print data
参考文档:
https://chromedevtools.github.io/devtools-protocol/tot/Runtime
# ATX 利用 Chrome Dev Tools 进行 WebView 的测试 (初级版本)
Appium测试WebView切换context:为什么Android System Webview升级之后仍然报出chrome version版本过低问题
Android Webview 基于chromedriver 查看具体页面pagesource