根据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()。
webdriver.Chrome()
driver.get('http://google.com')
driver.close()
仅供参考,在#SFSE:精简远程WebDriver教程中,它是通过捕获运行脚本的 本地 计算机与 远程 Selenium服务器之间的网络流量来完成的。
我将问题标记为Python具体,但实际上对任何指针都会感到满意。
Python
当您使用Chrome时,您可以指导chromedriver将驱动Chrome 的实例记录比该logging软件包可用的更多信息。该信息包括发送到浏览器的命令及其获得的响应。这是一个例子:
chromedriver
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_...调用相对应的部分如下所示:
/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项目提交了错误报告和修复程序。