Ich habe Tests mit Selenium2 / WebDriver geschrieben und möchte testen, ob HTTP Request ein HTTP 403 Forbidden zurückgibt.
Ist es möglich, den HTTP-Antwortstatuscode mit Selenium WebDriver abzurufen?
Ich habe Tests mit Selenium2 / WebDriver geschrieben und möchte testen, ob HTTP Request ein HTTP 403 Forbidden zurückgibt.
Ist es möglich, den HTTP-Antwortstatuscode mit Selenium WebDriver abzurufen?
webdriver
Einschränkungen des, und diese Einschränkungen sind für Python und Java gleich;)Antworten:
Mit einem Wort, nein. Die Verwendung der Selenium WebDriver-API ist nicht möglich. Dies wurde im Issue-Tracker für das Projekt ad nauseam erläutert , und die Funktion wird der API nicht hinzugefügt.
quelle
Es ist möglich, den Antwortcode einer http-Anfrage mit Selenium und Chrome oder Firefox abzurufen. Sie müssen lediglich Chrome oder Firefox im Protokollierungsmodus starten. Ich werde Ihnen unten einige Beispiele zeigen.
Java + Selen + Chrome Hier ist ein Beispiel für Java + Selen + Chrome, aber ich denke, dass dies in jeder Sprache (Python, C #, ...) möglich ist.
Sie müssen chromedriver lediglich anweisen, "Network.enable" auszuführen. Dies kann durch Aktivieren der Leistungsprotokollierung erfolgen.
Nachdem die Anforderung abgeschlossen ist, müssen Sie lediglich die Leistungsprotokolle abrufen und iterieren und "Network.responseReceived" für die angeforderte URL suchen:
Hier ist der Code:
Die Ausgabe sieht folgendermaßen aus:
Java + Selen + Firefox Ich habe endlich auch den Trick für Firefox gefunden. Sie müssen Firefox mit
MOZ_LOG
undMOZ_LOG_FILE
Umgebungsvariablen starten und http-Anforderungen auf Debug-Ebene protokollieren(4 = PR_LOG_DEBUG) - map.put("MOZ_LOG", "timestamp,sync,nsHttp:4")
. Speichern Sie das Protokoll in einer temporären Datei. Rufen Sie danach den Inhalt der gespeicherten Protokolldatei ab und analysieren Sie ihn nach dem Antwortcode (mithilfe einiger einfacher regulärer Ausdrücke). Ermitteln Sie zuerst den Beginn der Anforderung, identifizieren Sie ihre ID(nsHttpChannel::BeginConnect [this=000000CED8094000])
und suchen Sie dann im zweiten Schritt den Antwortcode für diese Anforderungs-ID(nsHttpChannel::ProcessResponse [this=000000CED8094000 httpStatus=200])
.Die Ausgabe dafür wird sein
Die Antwortheader finden Sie auch in der Protokolldatei. Sie können sie bekommen, wenn Sie wollen.
quelle
Sie können den BrowserMob-Proxy verwenden, um die Anforderungen und Antworten mit einem zu erfassen
HttpRequestInterceptor
. Hier ist ein Beispiel in Java:quelle
Für Benutzer von Python könnte Selenium Wire in Betracht gezogen werden , eine Bibliothek, die ich entwickelt habe, um Anforderungen des Browsers während eines Tests zu überprüfen.
Sie erhalten Zugriff auf Anfragen über das
driver.requests
Attribut:Drucke:
Die Bibliothek bietet Ihnen die Möglichkeit, auf Header, Statuscode und Textinhalte zuzugreifen sowie Header zu ändern und URLs neu zu schreiben.
quelle
driver.wait_for_request()
Methode verwenden, um die Anfrage zu finden, deren Antwort Sie interessiert. Weitere Informationen finden Sie in den Dokumenten .http://myserver.com/some/path/12345/
können Sie passendriver.wait_for_request(‘.*/12345/‘)
Ich hatte auch das gleiche Problem und steckte einige Tage fest, aber nach einigen Recherchen stellte ich fest, dass wir tatsächlich den "--remote-debugging-port" von Chrome verwenden können, um Anfragen in Verbindung mit dem Selenium-Webtreiber abzufangen. Verwenden Sie den folgenden Pseudocode als Referenz: -
Erstellen Sie eine Instanz des Chrome-Treibers mit Remote-Debugging
Rufen Sie http://127.0.0.1:freePort an
Extrahieren Sie die webSocket-URL von Chrome, um sie anzuhören. Sie können die Antwort sehen und herausfinden, wie Sie sie extrahieren können
Stellen Sie eine Verbindung zu diesem Socket her, und verwenden Sie asyncHttp
Aktivieren Sie die Netzwerkerfassung
Jetzt sendet Chrome alle netzwerkbezogenen Ereignisse und erfasst sie wie folgt
Sie können alles tun, was auf der Dev Tools-Website erwähnt wird. Siehe https://chromedevtools.github.io/devtools-protocol/ Hinweis: - Verwenden Sie chromedriver 2.39 oder höher.
Ich hoffe es hilft jemandem.
Referenz: Verwenden des Remote-Debugging-Protokolls von Google Chrome
quelle
selenium-webdriver
in meinem Fall für Ruby ), die automatischNetwork.enable
eine einfache Möglichkeit zum Überprüfen der letzten Antwort aktiviert und verfügbar macht ... wiedriver.response.status_code
. Vielleicht werde ich eines Tages dazu kommen, das hinzuzufügen ... :)status_code
. Es verwendet das Chrome-Remote-Debugging-Protokoll wie in diesem Beispiel.Erhalten Sie den Antwortcode in einer beliebigen Sprache (mit JavaScript):
Wenn Ihre Selenium-Tests in einem modernen Browser ausgeführt werden, können Sie den Antwortcode auf einfache Weise erhalten, indem Sie ein synchrones
XMLHttpRequest
* senden undstatus
die Antwort überprüfen :Sie können diese Technik mit jeder Programmiersprache verwenden, indem Sie Selenium auffordern, das Skript auszuführen. In Java können Sie beispielsweise Folgendes
JavascriptExecutor.executeScript()
sendenXMLHttpRequest
:* Sie könnten
XMLHttpRequest
stattdessen eine asynchrone Datei senden , müssen jedoch warten, bis sie abgeschlossen ist, bevor Sie mit dem Test fortfahren.Erhalten Sie den Antwortcode in Java:
Sie können den Antwortcode in Java erhalten, indem Sie
URL.openConnection()
und verwendenHttpURLConnection.getResponseCode()
:Diese Methode könnte wahrscheinlich auch auf andere Sprachen verallgemeinert werden, müsste jedoch an die API der Sprache (oder Bibliothek) angepasst werden.
quelle
Ich bin mir nicht sicher, ob dies das ist, wonach Sie suchen, aber ich hatte ein etwas anderes Ziel: zu überprüfen, ob ein Remote-Image vorhanden ist, und ich werde keinen 403-Fehler haben, sodass Sie Folgendes verwenden können:
quelle
Es ist nicht möglich, HTTP-Antwortcode direkt mit Selenium WebDriver abzurufen. Der Code kann mithilfe von Java-Code abgerufen und in Selenium WebDriver verwendet werden.
So erhalten Sie den HTTP-Antwortcode von Java:
Jetzt können Sie Ihren Selenium WebDriver-Code wie folgt schreiben:
quelle
Sie können Mobilenium ( https://github.com/rafpyprog/Mobilenium ) ausprobieren , ein Python-Paket, das BrowserMob Proxy und Selenium verbindet.
Ein Anwendungsbeispiel:
quelle