Napisałem testy z Selenium2 / WebDriver i chcę sprawdzić, czy żądanie HTTP zwraca HTTP 403 Forbidden.
Czy można uzyskać kod statusu odpowiedzi HTTP za pomocą Selenium WebDriver?
Napisałem testy z Selenium2 / WebDriver i chcę sprawdzić, czy żądanie HTTP zwraca HTTP 403 Forbidden.
Czy można uzyskać kod statusu odpowiedzi HTTP za pomocą Selenium WebDriver?
webdriver
ograniczeniach, które są takie same dla Pythona i Javy;)Odpowiedzi:
Jednym słowem nie. Nie jest to możliwe przy użyciu Selenium WebDriver API. Zostało to omówione do znudzenia w narzędziu do śledzenia problemów projektu, a funkcja nie zostanie dodana do interfejsu API.
źródło
Możliwe jest uzyskanie kodu odpowiedzi na żądanie http przy użyciu Selenium i Chrome lub Firefox. Wszystko, co musisz zrobić, to uruchomić przeglądarkę Chrome lub Firefox w trybie logowania. Poniżej pokażę kilka przykładów.
java + Selenium + Chrome Oto przykład java + Selenium + Chrome, ale myślę, że można to zrobić w dowolnym języku (python, c #, ...).
Wszystko, co musisz zrobić, to powiedzieć chromedriverowi, aby zrobił „Network.enable”. Można to zrobić, włączając rejestrowanie wydajności.
Po zakończeniu żądania wystarczy pobrać i powtórzyć dzienniki wydajności i znaleźć „Network.responseReceived” dla żądanego adresu URL:
Oto kod:
Wynik wygląda następująco:
java + Selenium + Firefox Wreszcie znalazłem również sztuczkę dla Firefoksa. Trzeba zacząć firefox użyciu
MOZ_LOG
iMOZ_LOG_FILE
zmienne środowisko i zalogować http żądania na poziomie debugowania(4 = PR_LOG_DEBUG) - map.put("MOZ_LOG", "timestamp,sync,nsHttp:4")
. Zapisz dziennik w pliku tymczasowym. Następnie pobierz zawartość zapisanego pliku dziennika i przeanalizuj go pod kątem kodu odpowiedzi (używając kilku prostych wyrażeń regularnych). Najpierw wykryj początek żądania, określając jego identyfikator(nsHttpChannel::BeginConnect [this=000000CED8094000])
, a następnie w drugim kroku znajdź kod odpowiedzi dla tego identyfikatora żądania(nsHttpChannel::ProcessResponse [this=000000CED8094000 httpStatus=200])
.Wynik tego będzie
Nagłówki odpowiedzi można również znaleźć w pliku dziennika. Możesz je zdobyć, jeśli chcesz.
źródło
Możesz użyć serwera proxy BrowserMob do przechwytywania żądań i odpowiedzi za pomocą pliku
HttpRequestInterceptor
. Oto przykład w Javie:źródło
Dla osób używających Pythona możesz rozważyć Selenium Wire , bibliotekę, którą opracowałem do sprawdzania żądań wysyłanych przez przeglądarkę podczas testu.
Dostęp do żądań uzyskujesz poprzez
driver.requests
atrybut:Wydruki:
Biblioteka daje możliwość dostępu do nagłówków, kodu statusu, treści, a także możliwość modyfikowania nagłówków i przepisywania adresów URL.
źródło
driver.wait_for_request()
metody do zlokalizowania żądania, którego odpowiedź Cię interesuje. Więcej informacji można znaleźć w dokumentacji .http://myserver.com/some/path/12345/
możesz spasowaćdriver.wait_for_request(‘.*/12345/‘)
Miałem również ten sam problem i utknąłem na kilka dni, ale po kilku badaniach doszedłem do wniosku, że możemy faktycznie użyć "--remote-port-debugowania" przeglądarki Chrome do przechwytywania żądań w połączeniu ze sterownikiem sieciowym selenu. Użyj następującego pseudokodu jako odniesienia: -
utworzyć instancję sterownika Chrome ze zdalnym debugowaniem
zadzwoń pod numer http://127.0.0.1:freePort
Wyodrębnij adres URL webSocket przeglądarki Chrome, aby nasłuchiwać, możesz zobaczyć odpowiedź i dowiedzieć się, jak wyodrębnić
Podłącz do tego gniazda, możesz użyć asyncHttp
Włącz przechwytywanie sieci
Teraz Chrome wyśle wszystkie zdarzenia związane z siecią i przechwyci je w następujący sposób
możesz zrobić wszystko, o czym mowa w witrynie narzędzi programistycznych. patrz https://chromedevtools.github.io/devtools-protocol/ Uwaga: - użyj chromedriver 2.39 lub nowszego.
Mam nadzieję, że to komuś pomoże.
odniesienie: Korzystanie z protokołu zdalnego debugowania Google Chrome
źródło
selenium-webdriver
, w moim przypadku), która automatycznie włączałabyNetwork.enable
i ujawniała prosty sposób sprawdzenia ostatniej odpowiedzi ... jakdriver.response.status_code
. Może któregoś dnia dodam to ... :)status_code
. Używa protokołu zdalnego debugowania Chrome, jak w tym przykładzie.Uzyskaj kod odpowiedzi w dowolnym języku (używając JavaScript):
Jeśli Twoje testy Selenium są uruchamiane w nowoczesnej przeglądarce, prostym sposobem uzyskania kodu odpowiedzi jest wysłanie synchronicznego
XMLHttpRequest
* i sprawdzeniestatus
odpowiedzi:Możesz użyć tej techniki z dowolnym językiem programowania, żądając, aby Selenium wykonało skrypt. Na przykład w Javie możesz
JavascriptExecutor.executeScript()
wysłaćXMLHttpRequest
:* Zamiast tego możesz wysłać asynchroniczny
XMLHttpRequest
, ale przed kontynuowaniem testu musisz poczekać na jego zakończenie.Uzyskaj kod odpowiedzi w języku Java:
Kod odpowiedzi w języku Java można uzyskać za pomocą
URL.openConnection()
iHttpURLConnection.getResponseCode()
:Ta metoda prawdopodobnie mogłaby zostać uogólniona również na inne języki, ale musiałaby zostać zmodyfikowana, aby pasowała do API języka (lub biblioteki).
źródło
Nie jestem pewien, czego szukasz, ale miałem trochę inny cel, to sprawdzić, czy zdalny obraz istnieje i nie będę miał błędu 403, więc możesz użyć czegoś takiego poniżej:
źródło
Nie jest możliwe uzyskanie kodu odpowiedzi HTTP bezpośrednio przy użyciu Selenium WebDriver. Kod można uzyskać za pomocą kodu Java i można go używać w Selenium WebDriver.
Aby uzyskać kod odpowiedzi HTTP przez java:
Teraz możesz napisać swój kod Selenium WebDriver, jak poniżej:
źródło
Możesz wypróbować Mobilenium ( https://github.com/rafpyprog/Mobilenium ), pakiet Pythona, który wiąże BrowserMob Proxy i Selenium.
Przykład użycia:
źródło