一尘不染

监控JSON Wire协议日志

selenium

根据Selenium文档,webdriver客户端和浏览器之间的交互是通过JSON Wire
Protocol完成的
。基本上,用python,ruby,java等语言编写的客户端将JSON消息发送到Web浏览器,并且Web浏览器也以JSON进行响应。

有没有一种方法可以在运行selenium测试时查看/捕获/记录这些JSON消息?

例如(在Python中):

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://google.com')

driver.close()

我想查看在实例化驱动程序(在本例中为Chrome)时,在python selenium
webdriver客户端和浏览器之间发生的JSON消息:webdriver.Chrome(),在获取页面时:driver.get('http://google.com')和在关闭页面时:driver.close()

仅供参考,在#SFSE:精简远程WebDriver教程中,它是通过捕获运行脚本的
本地 计算机与 远程 Selenium服务器之间的网络流量来完成的。

我将问题标记为Python具体,但实际上对任何指针都会感到满意。


阅读 275

收藏
2020-06-26

共1个答案

一尘不染

当您使用Chrome时,您可以指导chromedriver将驱动Chrome
的实例记录比该logging软件包可用的更多信息。该信息包括发送到浏览器的命令及其获得的响应。这是一个例子:

from selenium import webdriver

driver = webdriver.Chrome(service_log_path="/tmp/log")
driver.get("http://www.google.com")
driver.find_element_by_css_selector("input")
driver.quit()

上面的代码会将日志输出到/tmp/log。日志中与find_element_...调用相对应的部分如下所示:

[2.389][INFO]: COMMAND FindElement {
   "sessionId": "b6707ee92a3261e1dc33a53514490663",
   "using": "css selector",
   "value": "input"
}
[2.389][INFO]: Waiting for pending navigations...
[2.389][INFO]: Done waiting for pending navigations
[2.398][INFO]: Waiting for pending navigations...
[2.398][INFO]: Done waiting for pending navigations
[2.398][INFO]: RESPONSE FindElement {
   "ELEMENT": "0.3367185448296368-1"
}

据我所知,命令和响应忠实地代表了客户端和服务器之间发生的事情。根据我在这些日志中看到的内容,我已经向Selenium项目提交了错误报告和修复程序。

2020-06-26