ale*_*cxe 7 python selenium json protocols selenium-webdriver
根据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()
Run Code Online (Sandbox Code Playgroud)
我想看看当我实例化驱动程序(在这种情况下是Chrome)时,python selenium webdriver客户端和浏览器之间有什么JSON消息:webdriver.Chrome()当我得到一个页面时:driver.get('http://google.com')当我关闭它时:driver.close().
仅供参考,在#SFSE:剥离远程WebDriver教程中,它是通过捕获运行脚本的本地计算机和远程 selenium服务器之间的网络流量来完成的.
我正在将这个问题标记为Python具体的,但对任何指针都非常满意.
当您使用 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()
Run Code Online (Sandbox Code Playgroud)
上面的代码会将日志输出到/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"
}
Run Code Online (Sandbox Code Playgroud)
据我所知,命令和响应忠实地代表了客户端和服务器之间发生的事情。我已经根据我在这些日志中看到的内容向 Selenium 项目提交了错误报告和修复程序。
找到了一个几乎符合我需求的选项。
只需将记录器通过管道传输到stdout允许查看正在发出的底层请求:
import logging
import sys
from selenium import webdriver
# pipe logs to stdout
logger = logging.getLogger()
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.NOTSET)
# selenium specific code
driver = webdriver.Chrome()
driver.get('http://google.com')
driver.close()
Run Code Online (Sandbox Code Playgroud)
它打印:
POST http://127.0.0.1:56668/session {"desiredCapabilities": {"platform": "ANY", "browserName": "chrome", "version": "", "javascriptEnabled": true, "chromeOptions": {"args": [], "extensions": []}}}
Finished Request
POST http://127.0.0.1:56668/session/5b6875595143b0b9993ed4f66f1f19fc/url {"url": "http://google.com", "sessionId": "5b6875595143b0b9993ed4f66f1f19fc"}
Finished Request
DELETE http://127.0.0.1:56668/session/5b6875595143b0b9993ed4f66f1f19fc/window {"sessionId": "5b6875595143b0b9993ed4f66f1f19fc"}
Finished Request
Run Code Online (Sandbox Code Playgroud)
我没有看到回复,但这已经是一个进步。
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |