2012-09-05 13 views
5

Próbuję użyć WebDriver do nawigacji po witrynie https i pobrania pliku przy użyciu WebDriver. Kiedy zrobiłem to w ten sposób, pojawiło się okno pobierania pliku.Pobierz plik za pomocą protokołu HTTP w WebDriver

WebDriver driver = new ChromeDriver(); 
driver.get("http://xxx/file1.txt"); 

Zastanawiam się czy jest jakiś sposób po prostu wywołać metodę w WebDriver pobrać plik za pomocą regularnych https zwrócić bez symulowania kliknięcia?

Z góry dziękuję.

Odpowiedz

8

Nie ma, przynajmniej nie działa w żaden sposób we wszystkich przeglądarkach. Być może będziesz w stanie skonfigurować niektóre przeglądarki (Firefox i Chrome), aby pobierać pliki do określonej lokalizacji bez pytania. Jednak w przypadku czegoś takiego, o co pytasz, w ogóle nie potrzebujesz Selenium. Dowolny programowy klient HTTP to zrobi. W Javie polecam przeglądanie HttpClient z Apache; w .NET przy użyciu HttpWebRequest dostanie zadanie. Pamiętaj, że jeśli strona, od której pobierasz plik, wymaga uwierzytelnienia, w żądaniu HTTP może być konieczne określenie niestandardowych nagłówków.

Warto zauważyć, że warto dokonać ponownej oceny, dlaczego uważasz, że musisz przetestować pobieranie pliku, jeśli nie jest to tak proste, jak wykonanie żądania HTTP poza przeglądarką. This article omawia problem bardzo szczegółowo i dostarcza bardzo dobrze uzasadnionego argumentu, dlaczego testowanie pobierania pliku jest problematyczne i często niepotrzebne.

+0

Dzięki, ale muszę się najpierw zalogować, a następnie dostać się do strony pobierania i indeksowania URL. Trafienie bezpośrednio do adresu URL nie będzie działać z powodu procesu autoryzacji. – zsong

+2

Aby uzyskać Sokratejkę przez chwilę, w jaki sposób przeglądarka pobiera plik, używając tylko protokołu HTTP? W wielu przypadkach proces uwierzytelniania ustawia plik cookie zawierający informacje uwierzytelniające, który jest następnie przekazywany w nagłówkach żądania HTTP. Na szczęście biblioteki klienta HTTP zazwyczaj umożliwiają kontrolę nad nagłówkami żądań HTTP, więc potrzebujesz tylko informacji o plikach cookie. Będę edytować moją odpowiedź, aby rozwiązać problem, który nie został wymieniony w pierwotnym pytaniu. – JimEvans

+1

Jestem ciekawy co do tej odpowiedzi. Nie jest niepoprawny na poziomie technicznym. Jego ton nie jest zapalny. Być może nie jest to coś, co chcesz usłyszeć, ale nie zmniejsza użyteczności ani poprawności odpowiedzi. Jeśli spadkowcy zostawiają komentarze na temat tego, gdzie według nich braki są w odpowiedzi, można by je poprawić. Po prostu rezygnacja bez żadnych innych informacji zwrotnych nie jest pomocna ani dla osoby udzielającej odpowiedzi, ani dla osób przychodzących później, aby znaleźć odpowiedź na to samo lub podobne pytanie. – JimEvans

6

Tak, można. Musisz skonfigurować niestandardowy profil Chromedriver:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile['download.prompt_for_download'] = false 
profile['download.default_directory'] = download_directory 

Nie spowoduje wyświetlenia żadnych okien dialogowych. Miałem bardziej szczegółową odpowiedź na temat konfiguracji katalogu pobierania i sprawdzania, czy plik ma dowolny rozmiar: here.

Dodatkowe przełączniki chromedriver można znaleźć tutaj: http://peter.sh/experiments/chromium-command-line-switches/

Powiązane problemy