He escrito pruebas con Selenium2 / WebDriver y quiero probar si HTTP Request devuelve HTTP 403 Forbidden.
¿Es posible obtener el código de estado de respuesta HTTP con Selenium WebDriver?
He escrito pruebas con Selenium2 / WebDriver y quiero probar si HTTP Request devuelve HTTP 403 Forbidden.
¿Es posible obtener el código de estado de respuesta HTTP con Selenium WebDriver?
webdriver
limitaciones de ', y estas limitaciones son las mismas para Python y Java;)Respuestas:
En una palabra, no. No es posible usar la API de Selenium WebDriver. Esto se ha discutido hasta el cansancio en el rastreador de problemas del proyecto y la función no se agregará a la API.
fuente
Es posible obtener el código de respuesta de una solicitud http usando Selenium y Chrome o Firefox. Todo lo que tiene que hacer es iniciar Chrome o Firefox en modo de registro. Te mostraré algunos ejemplos a continuación.
java + Selenium + Chrome Aquí hay un ejemplo de java + Selenium + Chrome, pero supongo que se puede hacer en cualquier idioma (python, c #, ...).
Todo lo que necesita hacer es decirle a chromedriver que haga "Network.enable". Esto se puede hacer habilitando el registro de rendimiento.
Una vez realizada la solicitud, todo lo que tiene que hacer es obtener e iterar los registros de rendimiento y encontrar "Network.responseReceived" para la URL solicitada:
Aquí está el código:
La salida se ve así:
java + Selenium + Firefox Finalmente encontré el truco para Firefox también. Usted necesita comenzar a usar Firefox
MOZ_LOG
yMOZ_LOG_FILE
variables de entorno, y registrar las peticiones HTTP a nivel de depuración(4 = PR_LOG_DEBUG) - map.put("MOZ_LOG", "timestamp,sync,nsHttp:4")
. Guarde el registro en un archivo temporal. Después de eso, obtenga el contenido del archivo de registro guardado y analícelo para el código de respuesta (usando algunas expresiones regulares simples). Primero detecte el inicio de la solicitud, identificando su identificación(nsHttpChannel::BeginConnect [this=000000CED8094000])
, luego, en el segundo paso, busque el código de respuesta para esa identificación de solicitud(nsHttpChannel::ProcessResponse [this=000000CED8094000 httpStatus=200])
.La salida para esto será
Los encabezados de respuesta también se pueden encontrar en el archivo de registro. Puedes conseguirlos si quieres.
fuente
Puede utilizar el proxy BrowserMob para capturar las solicitudes y respuestas con un
HttpRequestInterceptor
. Aquí hay un ejemplo en Java:fuente
Para aquellas personas que usan Python, podrían considerar Selenium Wire , una biblioteca que desarrollé para inspeccionar las solicitudes realizadas por el navegador durante una prueba.
Obtienes acceso a las solicitudes a través del
driver.requests
atributo:Huellas dactilares:
La biblioteca le brinda la capacidad de acceder a encabezados, código de estado, contenido del cuerpo, así como la capacidad de modificar encabezados y reescribir URL.
fuente
driver.wait_for_request()
método para localizar la solicitud cuya respuesta le interesa. Consulte los documentos para obtener más información.http://myserver.com/some/path/12345/
puede pasardriver.wait_for_request(‘.*/12345/‘)
También tuve el mismo problema y me quedé bloqueado durante algunos días, pero después de investigar un poco, descubrí que en realidad podemos usar el "--remote-debugging-port" de Chrome para interceptar solicitudes junto con el controlador web selenium. Utilice el siguiente pseudocódigo como referencia: -
crear una instancia de controlador de Chrome con depuración remota
hacer una llamada a http://127.0.0.1:freePort
Extraiga la URL de webSocket de Chrome para escuchar, puede ver la respuesta y averiguar cómo extraer
Conéctese a este enchufe, puede usar asyncHttp
Habilitar la captura de red
Ahora Chrome enviará todos los eventos relacionados con la red y los capturará de la siguiente manera
puede hacer todo lo mencionado en el sitio de herramientas de desarrollo. ver https://chromedevtools.github.io/devtools-protocol/ Nota: - use chromedriver 2.39 o superior.
Espero que esto ayude a alguien.
referencia: uso del protocolo de depuración remota de Google Chrome
fuente
selenium-webdriver
, en mi caso) que habilitaNetwork.enable
y expone automáticamente una forma simple de verificar la última respuesta ... comodriver.response.status_code
. Tal vez algún día pueda agregar eso ... :)status_code
. Utiliza el protocolo de depuración remota de Chrome como en este ejemplo.Obtenga el código de respuesta en cualquier idioma (usando JavaScript):
Si sus pruebas de Selenium se ejecutan en un navegador moderno, una manera fácil de obtener el código de respuesta es enviar un síncrono
XMLHttpRequest
* y verificar elstatus
de la respuesta:Puede utilizar esta técnica con cualquier lenguaje de programación solicitando que Selenium ejecute el script. Por ejemplo, en Java puede usar
JavascriptExecutor.executeScript()
para enviarXMLHttpRequest
:* En su
XMLHttpRequest
lugar, puede enviar un mensaje asincrónico , pero deberá esperar a que se complete antes de continuar con la prueba.Obtenga el código de respuesta en Java:
Puede obtener el código de respuesta en Java utilizando
URL.openConnection()
yHttpURLConnection.getResponseCode()
:Este método probablemente también podría generalizarse a otros lenguajes, pero debería modificarse para adaptarse a la API del lenguaje (o biblioteca).
fuente
No estoy seguro de que esto sea lo que está buscando, pero tenía un objetivo un poco diferente: verificar si existe una imagen remota y no tendré el error 403, por lo que podría usar algo como a continuación:
fuente
No es posible obtener el código de respuesta HTTP utilizando Selenium WebDriver directamente. El código se puede obtener utilizando código Java y se puede utilizar en Selenium WebDriver.
Para obtener el código de respuesta HTTP por java:
Ahora puede escribir su código de Selenium WebDriver de la siguiente manera:
fuente
Puede probar Mobilenium ( https://github.com/rafpyprog/Mobilenium ), un paquete de Python que une BrowserMob Proxy y Selenium.
Un ejemplo de uso:
fuente