send_keys select_by_value example code chrome python json selenium selenium-webdriver protocols

select_by_value - selenium webdriver python



Monitoreo de registros de protocolo de cables JSON (2)

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

Solo conectar el registrador al stdout permite 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()

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.

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

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

Por ejemplo (en Python):

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

Quiero ver qué mensajes JSON están pasando entre el cliente de python selenium webdriver y un navegador cuando instancia 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() .

FYI, en el tutorial #SFSE: Stripping Down Remote WebDriver , se realiza mediante la captura del tráfico de red entre la máquina local donde se ejecuta la secuencia de comandos y el servidor de selenio remoto .

Estoy etiquetando la pregunta como específico de Python , pero realmente estaría contento con cualquier apuntador.


Cuando usas Chrome, puedes dirigir la instancia de chromedriver que impulsará Chrome para registrar más información de la 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 dará salida al registro a /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" }

Hasta donde yo sé, los comandos y las respuestas representan fielmente lo que está sucediendo entre el cliente y el servidor. He enviado informes de fallas y correcciones al proyecto Selenium sobre la base de lo que vi en estos registros.