Eu escrevi testes com Selenium2 / WebDriver e quero testar se a solicitação HTTP retorna um HTTP 403 proibido.
É possível obter o código de status de resposta HTTP com Selenium WebDriver?
Eu escrevi testes com Selenium2 / WebDriver e quero testar se a solicitação HTTP retorna um HTTP 403 proibido.
É possível obter o código de status de resposta HTTP com Selenium WebDriver?
webdriver
limitações do, e essas limitações são as mesmas para Python e Java;)Respostas:
Em uma palavra, não. Não é possível usar a API Selenium WebDriver. Isso foi discutido ad nauseam no rastreador de problemas do projeto e o recurso não será adicionado à API.
fonte
É possível obter o código de resposta de uma solicitação http usando Selenium e Chrome ou Firefox. Tudo que você precisa fazer é iniciar o Chrome ou o Firefox no modo de registro. Vou mostrar alguns exemplos abaixo.
java + Selenium + Chrome Aqui está um exemplo de java + Selenium + Chrome, mas acho que pode ser feito em qualquer linguagem (python, c #, ...).
Tudo que você precisa fazer é dizer ao chromedriver para fazer "Network.enable". Isso pode ser feito ativando o registro de desempenho.
Depois que a solicitação for concluída, tudo que você precisa fazer é obter e iterar os logs de desempenho e encontrar "Network.responseReceived" para o url solicitado:
Aqui está o código:
A saída é semelhante a esta:
java + Selenium + Firefox Finalmente encontrei o truque para o Firefox também. Você precisa iniciar o firefox usando as variáveis de ambiente
MOZ_LOG
eMOZ_LOG_FILE
e registrar as solicitações de http no nível de depuração(4 = PR_LOG_DEBUG) - map.put("MOZ_LOG", "timestamp,sync,nsHttp:4")
. Salve o log em um arquivo temporário. Depois disso, obtenha o conteúdo do arquivo de log salvo e analise-o para o código de resposta (usando algumas expressões regulares simples). Primeiro detecte o início da solicitação, identificando seu id e(nsHttpChannel::BeginConnect [this=000000CED8094000])
, na segunda etapa, encontre o código de resposta para esse id de solicitação(nsHttpChannel::ProcessResponse [this=000000CED8094000 httpStatus=200])
.A saída para isso será
Os cabeçalhos de resposta também podem ser encontrados no arquivo de log. Você pode obtê-los se quiser.
fonte
Você pode usar o proxy BrowserMob para capturar as solicitações e respostas com um
HttpRequestInterceptor
. Aqui está um exemplo em Java:fonte
Para aquelas pessoas que usam Python, você pode considerar Selenium Wire , uma biblioteca que desenvolvi para inspecionar solicitações feitas pelo navegador durante um teste.
Você obtém acesso às solicitações por meio do
driver.requests
atributo:Impressões:
A biblioteca oferece a capacidade de acessar cabeçalhos, código de status, conteúdo do corpo, bem como a capacidade de modificar cabeçalhos e reescrever URLs.
fonte
driver.wait_for_request()
método para localizar a solicitação cuja resposta você está interessado. Consulte os documentos para obter mais informações.http://myserver.com/some/path/12345/
você pode passardriver.wait_for_request(‘.*/12345/‘)
Eu também estava tendo o mesmo problema e travou por alguns dias, mas depois de algumas pesquisas, descobri que podemos realmente usar "--remote-debugging-port" do Chrome para interceptar solicitações em conjunto com o driver da web selenium. Use o seguinte pseudocódigo como referência: -
criar instância do driver do Chrome com depuração remota
faça uma chamada para http://127.0.0.1:freePort
Extraia o URL do webSocket do chrome para ouvir, você pode ver a resposta e descobrir como extrair
Conecte a este soquete, você pode usar asyncHttp
Habilitar captura de rede
Agora o Chrome irá enviar todos os eventos relacionados à rede e capturá-los da seguinte forma
você pode fazer tudo mencionado no site de ferramentas de desenvolvimento. consulte https://chromedevtools.github.io/devtools-protocol/ Nota: - use chromedriver 2.39 ou superior.
Eu espero que isso ajude alguém.
referência: Usando o protocolo de depuração remota do Google Chrome
fonte
selenium-webdriver
, no meu caso) que ativasse automaticamenteNetwork.enable
e expusesse uma maneira simples de verificar a última resposta ... comodriver.response.status_code
. Talvez um dia eu consiga adicionar isso ... :)status_code
. Ele usa o protocolo de depuração remota do Chrome como neste exemplo.Obtenha o código de resposta em qualquer linguagem (usando JavaScript):
Se seus testes Selenium forem executados em um navegador moderno, uma maneira fácil de obter o código de resposta é enviar um
XMLHttpRequest
* síncrono e verificar ostatus
da resposta:Você pode usar essa técnica com qualquer linguagem de programação, solicitando que o Selenium execute o script. Por exemplo, em Java, você pode usar
JavascriptExecutor.executeScript()
para enviarXMLHttpRequest
:* Em
XMLHttpRequest
vez disso, você poderia enviar um assíncrono , mas precisaria aguardar a conclusão antes de continuar o teste.Obtenha o código de resposta em Java:
Você pode obter o código de resposta em Java usando
URL.openConnection()
eHttpURLConnection.getResponseCode()
:Este método provavelmente poderia ser generalizado para outras linguagens também, mas precisaria ser modificado para se ajustar à API da linguagem (ou biblioteca).
fonte
Não tenho certeza se é isso que você está procurando, mas eu tinha um objetivo um pouco diferente é verificar se a imagem remota existe e não terei o erro 403, então você pode usar algo como abaixo:
fonte
Não é possível obter o código de resposta HTTP usando o Selenium WebDriver diretamente. O código pode ser obtido usando código Java e que pode ser usado no Selenium WebDriver.
Para obter o código de resposta HTTP por java:
Agora você pode escrever seu código Selenium WebDriver conforme abaixo:
fonte
Você pode experimentar o Mobilenium ( https://github.com/rafpyprog/Mobilenium ), um pacote python que liga o BrowserMob Proxy e o Selenium.
Um exemplo de uso:
fonte