J'ai écrit des tests avec Selenium2 / WebDriver et je souhaite tester si HTTP Request renvoie un HTTP 403 Forbidden.
Est-il possible d'obtenir le code d'état de la réponse HTTP avec Selenium WebDriver?
J'ai écrit des tests avec Selenium2 / WebDriver et je souhaite tester si HTTP Request renvoie un HTTP 403 Forbidden.
Est-il possible d'obtenir le code d'état de la réponse HTTP avec Selenium WebDriver?
webdriver
limitations de 's, et ces limitations sont les mêmes pour Python et Java;)Réponses:
En un mot, non. Ce n'est pas possible avec l'API Selenium WebDriver. Cela a été discuté ad nauseam dans le suivi des problèmes du projet, et la fonctionnalité ne sera pas ajoutée à l'API.
la source
Il est possible d'obtenir le code de réponse d'une requête http en utilisant Selenium et Chrome ou Firefox. Tout ce que vous avez à faire est de démarrer Chrome ou Firefox en mode de journalisation. Je vais vous montrer quelques exemples ci-dessous.
java + Selenium + Chrome Voici un exemple de java + Selenium + Chrome, mais j'imagine que cela peut être fait dans n'importe quel langage (python, c #, ...).
Tout ce que vous avez à faire est de dire à chromedriver de faire "Network.enable". Cela peut être fait en activant la journalisation des performances.
Une fois la requête effectuée, il vous suffit d'obtenir et d'itérer les journaux de performances et de trouver "Network.responseReceived" pour l'url demandée:
Voici le code:
La sortie ressemble à ceci:
java + Selenium + Firefox J'ai enfin trouvé l'astuce pour Firefox aussi. Vous devez commencer en utilisant Firefox
MOZ_LOG
et lesMOZ_LOG_FILE
variables d' environnement, et enregistrer les requêtes http au niveau de débogage(4 = PR_LOG_DEBUG) - map.put("MOZ_LOG", "timestamp,sync,nsHttp:4")
. Enregistrez le journal dans un fichier temporaire. Après cela, récupérez le contenu du fichier journal enregistré et analysez-le pour le code de réponse (à l'aide d'expressions régulières simples). Détectez d'abord le début de la demande, identifiez son identifiant(nsHttpChannel::BeginConnect [this=000000CED8094000])
, puis à la deuxième étape, trouvez le code de réponse pour cet identifiant de demande(nsHttpChannel::ProcessResponse [this=000000CED8094000 httpStatus=200])
.La sortie pour cela sera
Les en-têtes de réponse se trouvent également dans le fichier journal. Vous pouvez les obtenir si vous le souhaitez.
la source
Vous pouvez utiliser le proxy BrowserMob pour capturer les demandes et les réponses avec un fichier
HttpRequestInterceptor
. Voici un exemple en Java:la source
Pour les personnes utilisant Python, vous pouvez envisager Selenium Wire , une bibliothèque que j'ai développée pour inspecter les demandes faites par le navigateur lors d'un test.
Vous avez accès aux requêtes via l'
driver.requests
attribut:Impressions:
La bibliothèque vous donne la possibilité d'accéder aux en-têtes, au code d'état, au contenu du corps, ainsi que la possibilité de modifier les en-têtes et de réécrire les URL.
la source
driver.wait_for_request()
méthode pour localiser la demande dont la réponse vous intéresse. Consultez la documentation pour plus d'informations.http://myserver.com/some/path/12345/
vous pouvez passerdriver.wait_for_request(‘.*/12345/‘)
J'avais également le même problème et j'étais bloqué pendant quelques jours, mais après quelques recherches, j'ai compris que nous pouvions réellement utiliser le "--remote-debugging-port" de chrome pour intercepter les requêtes en conjonction avec le pilote web sélénium. Utilisez le pseudocode suivant comme référence: -
créer une instance de pilote chrome avec le débogage à distance
faire un appel get à http://127.0.0.1:freePort
Extrayez l'URL webSocket de Chrome pour écouter, vous pouvez voir la réponse et comprendre comment extraire
Connectez-vous à cette prise, vous pouvez utiliser asyncHttp
Activer la capture réseau
Maintenant, Chrome enverra tous les événements liés au réseau et les capturera comme suit
vous pouvez faire tout ce qui est mentionné sur le site des outils de développement. voir https://chromedevtools.github.io/devtools-protocol/ Remarque: - utilisez chromedriver 2.39 ou supérieur.
J'espère que cela aide quelqu'un.
reference: Utilisation du protocole de débogage à distance de Google Chrome
la source
selenium-webdriver
, dans mon cas) qui a automatiquement activéNetwork.enable
et exposé un moyen simple de vérifier la dernière réponse ... commedriver.response.status_code
. Peut-être qu'un jour je vais ajouter ça ... :)status_code
. Il utilise le protocole de débogage à distance Chrome comme dans cet exemple.Obtenez le code de réponse dans n'importe quelle langue (à l'aide de JavaScript):
Si vos tests Selenium s'exécutent dans un navigateur moderne, un moyen simple d'obtenir le code de réponse est d'envoyer un synchrone
XMLHttpRequest
* et de vérifier lestatus
de la réponse:Vous pouvez utiliser cette technique avec n'importe quel langage de programmation en demandant à Selenium d'exécuter le script. Par exemple, en Java, vous pouvez utiliser
JavascriptExecutor.executeScript()
pour envoyerXMLHttpRequest
:* Vous pouvez envoyer un fichier asynchrone à la
XMLHttpRequest
place, mais vous devrez attendre qu'il se termine avant de continuer votre test.Obtenez le code de réponse en Java:
Vous pouvez obtenir le code de réponse en Java en utilisant
URL.openConnection()
etHttpURLConnection.getResponseCode()
:Cette méthode pourrait probablement être généralisée à d'autres langages également, mais devrait être modifiée pour s'adapter à l'API du langage (ou de la bibliothèque).
la source
Je ne suis pas sûr que ce soit ce que vous recherchez, mais mon objectif est un peu différent de vérifier si l'image distante existe et je n'aurai pas d'erreur 403, vous pouvez donc utiliser quelque chose comme ci-dessous:
la source
Il n'est pas possible d'obtenir le code de réponse HTTP en utilisant directement Selenium WebDriver. Le code peut être obtenu en utilisant du code Java et peut être utilisé dans Selenium WebDriver.
Pour obtenir le code de réponse HTTP par java:
Vous pouvez maintenant écrire votre code Selenium WebDriver comme ci-dessous:
la source
Vous pouvez essayer Mobilenium ( https://github.com/rafpyprog/Mobilenium ), un package python qui lie BrowserMob Proxy et Selenium.
Un exemple d'utilisation:
la source