Czy istnieje interfejs API, który pozwala mi manipulować oknem dialogowym pobierania plików w przeglądarce Firefox? (Chcę uzyskać dostęp do tego, który pojawia się, gdy użytkownik coś robi, a nie sam inicjować).
To, co chcę zrobić, to uzyskać dostęp do tego okna dialogowego z Selenium (i nie jestem pewien, czy "tryb uprzywilejowany" Selenium wystarczy, aby uzyskać dostęp do interfejsu chrome).
Odpowiedzi:
Nie żebym o tym wiedział. Możesz jednak skonfigurować Firefoksa, aby automatycznie rozpoczynał pobieranie i zapisywał plik w określonym miejscu. Twój test może wtedy sprawdzić, czy plik faktycznie dotarł.
źródło
Mam rozwiązanie tego problemu, sprawdź kod:
źródło
Content-Disposition: attachment
. Wydaje się, że Firefox zawsze wyskakuje okno dialogowe w tym przypadku!setPreference("browser.helperApps.neverAsk.saveToDisk", "application/xls");
Utknąłem z tym samym problemem, ale znalazłem rozwiązanie. Zrobiłem to tak samo jak ten blog .
Oczywiście to była Java, przetłumaczyłem ją na Python:
W moim przykładzie był to plik CSV. Ale kiedy potrzebujesz więcej, są przechowywane w pliku
~/.mozilla/$USER_PROFILE/mimeTypes.rdf
źródło
Aplikacje internetowe generują 3 różne typy wyskakujących okienek; mianowicie,
Ogólnie wyskakujące okienka JavaScript są generowane przez kod aplikacji internetowej. Selenium zapewnia interfejs API do obsługi wyskakujących okienek JavaScript, takich jak
Alert
.Ostatecznie najprostszym sposobem zignorowania wyskakujących okienek przeglądarki i pobierania plików jest wykorzystanie profili przeglądarki; Można to zrobić na kilka sposobów:
Metoda 1
Zanim zaczniesz pracować z wyskakującymi okienkami w profilach przeglądarki, upewnij się, że domyślne opcje pobierania to Zapisz plik.
(Otwórz przeglądarkę Firefox) Narzędzia> Opcje> Aplikacje
Metoda 2
Skorzystaj z poniższego fragmentu kodu i edytuj w razie potrzeby.
źródło
Większość przeglądarek (w moim przypadku Firefox) domyślnie wybiera przycisk OK. Więc udało mi się to rozwiązać za pomocą następującego kodu. Zasadniczo naciska enter i plik jest pobierany.
źródło
Miałem ten sam problem. W naszej aplikacji instancja FireFox została utworzona przez przekazanie DesiredCapabilities w następujący sposób
Na podstawie sugestii innych wprowadziłem zmiany jako
To służyło celowi, ale niestety moje inne testy automatyzacji zaczęły zawodzić. Powodem było to, że usunąłem wcześniej przekazywane możliwości.
Trochę więcej przeglądania w sieci i znalazłem alternatywny sposób. Możemy ustawić sam profil w żądanych Możliwościach.
Tak wygląda nowy działający kod
źródło
Nie wiem, ale być może możesz sprawdzić źródło jednego z dodatków do pobierania Firefoksa.
Oto źródło tego, którego używam Download Statusbar .
źródło
Miałem ten sam problem, nie chciałem mieć dostępu do Save Dialogue.
Poniższy kod może pomóc:
W zależności od typu pobieranego pliku należy określić typy zawartości.
Możesz określić wiele typów treści oddzielonych znakiem „ ;'
na przykład:
źródło
Zamiast uruchamiać natywne okno dialogowe pobierania plików, jak na przykład:
Zwykle robię to zamiast tego, aby ominąć natywne okno dialogowe Pobieranie plików. W ten sposób działa na WSZYSTKICH przeglądarkach:
Wymaga to tylko zaimplementowania metody,
getFileFromURL
która używa Apache HttpClient do pobrania pliku i zwrócenia odwołania do pliku.Podobnie, jeśli używasz Selenide , działa to w ten sam sposób, używając wbudowanej
download()
funkcji do obsługi pobierania plików.źródło
Nie zrozumiałem Twojego celu. Czy chciałeś, aby Twój test automatycznie pobierał plik po wykonaniu testu, jeśli tak, to musisz użyć niestandardowego profilu Firefoksa podczas wykonywania testu.
W profilu niestandardowym po raz pierwszy wykonaj test ręcznie, a jeśli pojawi się okno dialogowe pobierania, ustaw je Zapisz na dysku, a także zaznacz pole wyboru Zawsze wykonuj tę akcję, co zapewni, że plik zostanie automatycznie pobrany przy następnym uruchomieniu testu.
źródło
Dodatkowo możesz dodać
Aby usunąć listę pobranych plików, która jest wyświetlana domyślnie i zakrywa część strony internetowej.
Moje łączne ustawienia to:
źródło