Potrzebuję najlepszego sposobu na sprawdzenie nagłówków odpowiedzi HTTP za pomocą Selenium. Rozejrzałem się po dokumentach Selenium i nie widziałem żadnego prostego sposobu na zrobienie tego. Pomoc jest bardzo cenna.Najlepszy sposób na sprawdzenie nagłówków odpowiedzi HTTP za pomocą Selenium
Odpowiedz
Kilka razy odpowiedziałem na to pytanie w StackOverflow. Wyszukaj moje poprzednie odpowiedzi, aby je wykopać. Klucz, który musisz napisać niestandardowy kod Java, który rozszerza ProxyHandler i SeleniumServer. Musisz również użyć wydania AFTER 1.0 beta 2.
Jeśli chodzi o ludzi, którzy pytają o numer , dlaczego chcesz tego dokonać: jest wiele powodów. W moim przypadku testujemy ciężką aplikację AJAX, a gdy coś pójdzie nie tak, jedną z pierwszych rzeczy, które debugujemy, jest przewód sieciowy. Pomoże nam to sprawdzić, czy nastąpiło wywołanie AJAX, a jeśli tak, to jaka była reakcja.W rzeczywistości zautomatyzowaliśmy zbieranie tych informacji i przechwyciliśmy je (wraz z zrzutem ekranu) z każdym testem Selenium.
Zaznaczam tę odpowiedź jako tę, którą lubię, ponieważ w rzeczywistości rozwiązuje ona mój problem. :) Mamy powody, dla których chcemy sprawdzić również nagłówki. Zgadzam się z powyższymi postami, ale jest to bardzo przydatne dla nas, aby dostać się do nagłówków. – globulus
Cóż, skoro to sam Pan Selenium, nie można się spierać;). Wiedziałem, że możesz również rozszerzyć klasy Java na serwerze. –
Przeszukałem twoje odpowiedzi i nie mogę znaleźć tego, do którego się odnosisz. Jaka była to odpowiedź? Czy masz kilka przykładów rozszerzenia tych dwóch klas Java? – nzpcmad
To, co zrobiłem, aby obsłużyć to przy użyciu Selenium (nie Selenium RC), to przekonwertować testy HTML na JSP, a następnie wykorzystać Javę tam, gdzie jest to potrzebne do czytania nagłówków lub robić rzeczy, których JavaScript (selen to tylko Javascript) nie może zrobić .
Być może mógłbyś podać kilka szczegółów na temat tego, jak planujesz używać Selenium?
Używam sterownika Ruby dla Selenium RC. Nie jestem pewien, czy podążam za tym, co masz na myśli, mówiąc o konwersji testów HTML na JSP. Witryna, którą testuję, jest napisana w .Net, chociaż nie mogę sobie wyobrazić, że to by zmieniło podejście. A więc jest sposób na przechwycenie nagłówków? – globulus
Nie użyłbym Selenium do tego typu testu i sugeruję, aby rozwiązać różne problemy z testowaniem za pomocą różnych narzędzi. co możemy zrobić, to:
testy Wykorzystanie jednostek do kodu testu: metody i klasy
testy integracyjne, aby sprawdzić, jak komponenty aplikacji powiesić razem
Prosty test funkcjonalny ramy jak Canoo WebTest (lub odpowiednik), aby potwierdzić takie nagłówki jak cache Http, podstawową strukturę strony, proste przekierowanie i ustawienia/wartości cookie
Indywidualne testy w celu zapewnienia ważności stron Standardy W3C
JSunit przetestować klasy i metody stworzone
Selen przetestować UI funkcjonalności/zachowanie Javascript oraz integrację JavaScript na tych stronach
Warto spędzać czas wyrwanie odpowiedzialność za testowanie różnych aspektów systemu przy użyciu tych różnych narzędzi, ponieważ używanie tylko Selenu może powodować problemy:
- Im większy zestaw, tym wolniej działają. Rzeczywiście Selen jest z natury mniejsza w porównaniu do innych narzędzi wymienionych
- Obsługuje ZACHOWANIE/testowanie funkcjonalne dobrze, ale mimo wszystko XPaths mogą być kruche i mogą wymagać zwiększenia ilości czasu i wysiłku, aby utrzymać
- Zazwyczaj wymaga konfiguracji „jak-gdyby -real-life” dane z aplikacji do wejścia przez użytkownika scenariuszami (który może być brudny i zabiera dużo czasu)
Istnieją również pewne techniki - które mogą lub nie mogą natknąć - co możesz użyć do wykonania testów Selenium more resilient.
Funkcja API captureNetworkTraffic() w DefaultSelenium przechwytuje nagłówki żądania/odpowiedzi http i umożliwia dostęp do nich w formacie html/xml/plain.
Oto przykładowy kod:
Selenium s = new DefaultSelenium(...);
s.start("captureNetworkTraffic=true");
s.open("http://www.google.com");
String xml = s.captureNetworkTraffic("xml"); // html, plain
s.stop();
ta metoda nie jest obsługiwana w selen 2 .. otrzymuję 'java.lang.UnsupportedOperationException: captureNetworkTraffic' –
Wydaje mi się, że to może być bardzo przydatne do testowania nagłówki odpowiedzi HTTP z selenem. Nie w 100% przypadków, może ... ale na pewno są. Jeśli sprawdzasz sekwencję stron, wydaje się, że warto przetestować niektóre nagłówki odpowiedzi w ramach tego testu (na myśl o typie zawartości i pragma).
Cóż, miałem nadzieję dowiedzieć się, czy właściwość Accept-Encoding z nagłówka HTTP zawiera "gzip", ponieważ w naszej firmie kompresujemy pliki CSS i JS w naszej aplikacji internetowej przez gzip i chcemy przetestować je przez Selenim po każdym zatwierdzeniu.
Wymyśliłem obejście, które wykorzystuje wbudowany serwer proxy, dzięki uprzejmości projektu Proxoid.
Jego lekka, w przeciwieństwie do praktycznie każdej innej alternatywy tam (jak BrowserMob lub nawet LittleProxy)
Zobacz HOWTO, z kodem, tutaj: http://www.supermind.org/blog/968/howto-collect-webdriver-http-request-and-response-headers
odczytać pliki cookie sesji z Selen i następnie wykorzystać prawdziwy Biblioteka HTTP poza Selenem, aby zażądać określonej strony.
Oto kod Python:
# get session cookies from Selenium
cookies = {}
for s_cookie in self.selenium.get_cookies():
cookies[s_cookie["name"]]=s_cookie["value"]
# request the pdf using the cookies:
response = requests.get(self.full_url('/vms/business_unit/2002/operational_unit/200202/guest/40/bill/pdf/'), cookies = cookies)
self.assertEqual(response.headers["content-type"], "application/pdf")
Co dokładnie chcesz zrobić? Selenium działa w przeglądarce. Czy są jakieś konkretne informacje, o które prosisz? – Ben