Monitoreo de registros de protocolo de conexión JSON

De acuerdo con la documentación de Selenium, las interacciones entre el cliente webdriver y un navegador se realizan a través de JSON Wire Protocol . Básicamente, el cliente, escrito en python, ruby, java, envía mensajes JSON al navegador web y el navegador web responde con JSON también.

¿Hay alguna forma de ver / capturar / registrar estos mensajes JSON mientras se ejecuta una prueba de selenium?

Por ejemplo (en Python):

from selenium import webdriver driver = webdriver.Chrome() driver.get('http://google.com') driver.close() 

Quiero ver qué mensajes JSON van entre el cliente de python selenium webdriver y un navegador cuando instalo el controlador (en este caso Chrome): webdriver.Chrome() , cuando driver.get('http://google.com') una página: driver.get('http://google.com') y cuando lo estoy cerrando: driver.close() .

Para su información, en el tutorial de #SFSE: Eliminación del WebDriver Remoto , se realiza mediante la captura del tráfico de red entre la máquina local donde se ejecuta el script y el servidor remoto de selenium.

Estoy etiquetando la pregunta como específica de Python , pero realmente estaría feliz con cualquier puntero.

Cuando usa Chrome, puede dirigir la instancia de chromedriver que hará que Chrome registre más información de la que está disponible a través del paquete de logging . Esta información incluye los comandos enviados al navegador y las respuestas que recibe. Aquí hay un ejemplo:

 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() 

El código anterior generará el registro en /tmp/log . La parte del registro que corresponde a la llamada find_element_... ve así:

 [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" } 

Que yo sepa, los comandos y las respuestas representan fielmente lo que sucede entre el cliente y el servidor. He enviado informes de errores y correcciones al proyecto Selenium sobre la base de lo que vi en estos registros.

Encontré una opción que casi se ajusta a mis necesidades.

Con solo colocar el registrador en la stdout podrá ver las solicitudes subyacentes que se realizan:

 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() 

Se imprime:

 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 

No veo las respuestas, pero esto ya es un progreso.