Selenium Firefox Profil: Przewodnik konfiguracji

⚡ Inteligentne podsumowanie

Firefox profil przechowuje zakładki, hasła, dodatki i preferencje należące do jednego użytkownika przeglądarki, Selenium WebDriver może załadować dedykowany profil, dzięki czemu każde automatyczne uruchomienie będzie rozpoczynać się od identycznego, przewidywalnego stanu przeglądarki.

  • 🔘 Podstawy profilu: A Firefox Profil przechowuje w jednym folderze zakładki, zapisane hasła, dodatki, certyfikaty i preferencje jednego użytkownika.
  • Lokalizacja profilu: Windows, Linux i macOS każdy folder profilu sklepu znajduje się w innej ścieżce wewnątrz katalogu użytkownika.
  • Tworzenie profilu: Wbudowany menedżer profili uruchamia się poleceniem firefox.exe -p i tworzy czysty profil automatyzacji w pięciu krokach.
  • 🧪 Code dostęp: Klasa ProfilesIni odczytuje profiles.ini, a getProfile zwraca nazwany profil jako FirefoxObiekt profilu.
  • 🛠️. Obecna składnia: Selenium 3 i 4 przechodzą przez profil FirefoxOpcje.setProfile zamiast FirefoxKonstruktor sterownika.
  • ⚠️ Preferencje: setPreference kontroluje folder pobierania, powiadomienia, język i obsługę certyfikatów przed uruchomieniem przeglądarki.

Selenium Firefox Przewodnik po konfiguracji profilu

Selenium Firefox Profil

Firefox profil to zbiór ustawień, dostosowywania, dodatków i innych ustawień personalizacji, których można dokonać na stronie Firefox Browser. Możesz dostosować Firefox profil dostosowany do Twoich potrzeb Selenium wymóg automatyzacji.

Tak więc, Firefox lub dowolna inna przeglądarka obsługuje ustawienia certyfikatów SSL. Dlatego ich automatyzacja ma sens wraz z kodem wykonania testu.

Krótko mówiąc, profil to osobiste ustawienia użytkownika. Jeśli chcesz prowadzić niezawodną automatyzacja na Firefox W przypadku przeglądarki zaleca się utworzenie osobnego profilu. Dedykowany profil chroni również codzienne dane przeglądania przed testem, co jest pierwszą rzeczą, którą należy wykluczyć, gdy Selenium Skrypt zachowuje się inaczej na dwóch maszynach.

Lokalizacja folderu profilu na dysku

Firefox profil jest taki sam, z jakiego korzystają różni użytkownicy Firefox. Firefox zapisuje dane osobowe, takie jak zakładki, hasła i preferencje użytkownika, które można edytować, usuwać lub tworzyć za pomocą menedżera profili.

Poniższy zrzut ekranu pokazuje folder profilu, tak jak pojawia się on na dysku, nazwany tak jak profil, z losowym prefiksem.

Firefox folder profilu wyświetlany na dysku z losowym prefiksem

Lokalizacja profilu jest następująca

  • Dla litu szacuje się Windows > C:\Użytkownicy\ \AppData\Roaming\Mozilla\Firefox\Profiles\nazwa_profilu.domyślna
  • Dla litu szacuje się Linux > ~/.mozilla/firefox/nazwa_profilu.default/
  • W przypadku systemu Mac OS X > ~/Library/Application Support/Firefox/Profile/nazwa_profilu.default/

Aby odnieść sukces Selenium Próba, A Firefox profil powinien być –

  • Łatwy do załadowania
  • Ustawienia proxy, jeśli to konieczne
  • Inne ustawienia specyficzne dla użytkownika w oparciu o potrzeby automatyzacji

Jak ustawić Firefox Profil dla Selenium Testy

Zobaczmy krok po kroku, jak utworzyć Firefox profil.

Krok 1) Zamknij Firefox przeglądarka

W pierwszym kroku zamknij Firefox jeśli jest już otwarty. Menedżer profili nie uruchomi się, gdy Firefox Okno jest uruchomione.

Krok 2) Otwarty bieg (Windows klawisz + R) i wpisz firefox.exe –p

Okno dialogowe Uruchom powinno wyglądać tak, jak na zrzucie ekranu poniżej, zanim naciśniesz OK.

Windows Uruchom okno dialogowe z poleceniem firefox.exe -p wpisanym

Uwaga: Jeśli się nie otworzy, możesz spróbować wpisać pełną ścieżkę ujętą w cudzysłów.

  • Na 32 bitach Windows: „C:\Pliki programów\Mozilla Firefox\firefox.exe” –p
  • Na 64 bitach Windows (32-bitowy Firefox): „C:\Pliki programów (x86)\Mozilla Firefox\firefox.exe” –p

Krok 3) Wybierz profil użytkownika

Teraz pojawi się okno dialogowe o nazwie Firefox otworzy się tak jak pokazano poniżej.

Firefox Wybierz okno dialogowe profilu użytkownika zawierające listę istniejących profili

Krok 4) Stworzyć profil

Aby uruchomić kreatora, wybierz opcję Utwórz profil, pokazaną na kolejnym zrzucie ekranu.

Ekran powitalny Kreatora tworzenia profilu w Firefox menedżer profili

Teraz wybierz opcję Utwórz profil w oknie, a otworzy się kreator. Kliknij dalej.

Krok 5) Podaj nazwę swojego profilu

Wpisz nazwę profilu automatyzacji w polu podświetlonym poniżej i zakończ działanie kreatora.

Wchodzenie do nowego Firefox nazwa profilu w Kreatorze tworzenia profilu

Teraz Twój profil jest gotowy, możesz wybrać swój profil i otworzyć FirefoxOd tego momentu profil zachowuje się jak każda inna sesja przeglądarki, więc pierwszy skrypt WebDriver będzie z nim konkurować bez zmian.

Zauważysz, że nowy Firefox oknie nie będą wyświetlane żadne ikony zakładek ani ulubionych.

Uwaga: Ostatnio wybrany profil zostanie automatycznie załadowany przy następnym uruchomieniu. Firefox początek. Jeśli chcesz zmienić profile, będziesz musiał ponownie uruchomić menedżera profili.

Skrypt automatyzacji dla Selenium

Po utworzeniu profilu kolejnym krokiem jest załadowanie go z kodu. Aby uzyskać dostęp do nowo utworzonego profilu, Firefox profil w Selenium Do przetestowania oprogramowania WebDriver należy użyć wbudowanej klasy ProfilesIni WebDriver i jej metody getProfile, jak pokazano poniżej.

⚠️ Uwaga dotycząca wersji: fragmenty w tej sekcji są oryginalne Selenium 2 forma. W chwili obecnej Selenium uwalnia klasę, w której mieszka org.openqa.selenium.firefox.ProfilesIni - .wewnętrzny podpakiet został usunięty — a profil jest przekazywany kierowcy przez FirefoxOpcje. Zobacz FirefoxPoniżej znajdziesz sekcję opcji dla współczesnego odpowiednika.

Selenium kod do profilu

To kod umożliwiający wdrożenie profilu, który można osadzić w Selenium kod.

ProfilesIni profile = new ProfilesIni();

// spowoduje to utworzenie obiektu dla Firefox profil

FirefoxProfile myprofile = profile.getProfile("xyzProfile");

// to zainicjuje Firefox kierowca

WebDriver driver = new FirefoxDriver(myprofile)

Zobaczmy implementację tego kodu w poniższych przykładach.

Firefox Przykład profilu 1

Pierwszy przykład wczytuje profil po nazwie. Poniższy zrzut ekranu pokazuje ten sam skrypt w edytorze.

Firefox Przykład profilu 1 skrypt ładujący profil według nazwy w edytorze

// import the package
import java.io.File;
      import java.util.concurrent.TimeUnit;
      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;
public class FirefoxProfile {
 	public static void main(String[] args) {
	ProfilesIni profile = new ProfilesIni();
	FirefoxProfile myprofile = profile.getProfile("xyzProfile");
// Initialize Firefox driver
	WebDriver driver = new FirefoxDriver(myprofile);
//Maximize browser window
	driver.manage().window().maximize();
//Go to URL which you want to navigate
	driver.get("http://www.google.com");
//Set  timeout  for 5 seconds so that the page may load properly within that time
	driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
//close firefox browser
	driver.close();
}

}

Wyjaśnienie kodu

Poniżej znajduje się wyjaśnienie kodu linia po linii.

  • Code wiersz 2-7: Przede wszystkim musimy zaimportować pakiet wymagany do uruchomienia Selenium kod.
  • Code wiersz 8: Utwórz klasę publiczną „FirefoxProfil."
  • Code wiersz 9: Utwórz obiekt (musisz mieć podstawową wiedzę na temat koncepcji OOP).
  • Code wiersz 10-11: Musimy zainicjować Firefox profil z obiektem myprofile.
  • Code wiersz 13: Utwórz obiekt dla Firefox.
  • Code wiersz 15: Maksymalizuj okno.
  • Code linia 17: driver.get służy do nawigacji do podanego URL.
  • Code wiersz 19: Ustaw limit czasu, aby odczekać jakiś czas, zanim przeglądarka załaduje stronę przed przejściem do następnej strony.
  • Code linia 21: Zamknij Firefox.

Przyjrzyjmy się jeszcze jednemu przykładowi.

Firefox Przykład profilu 2

W drugim przykładzie pominięto plik profiles.ini i wskazano bezpośrednio folder profilu, jak pokazano na zrzucie ekranu edytora.

Firefox Przykład profilu 2 wskazujący skrypt FirefoxProfil w ścieżce folderu

import java.io.File;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;

public class FirefoxProfile2{
public static void main(String[] args) {

// Create object for FirefoxProfile
	FirefoxProfilemyprofile=newFirefoxProfile (newFile("\c:users\AppData\MozillaFirefoxProfile_name.default "));  
// Initialize Firefox driver    
	WebDriver driver = new FirefoxDriver(myprofile);
//Maximize browser window       
	driver.manage().window().maximize();
//Go to URL      
	driver.get("http://www.google.com");
//Set  timeout      
	driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
//close firefox browser  
	driver.close();
    }

Wyjaśnienie kodu

Poniżej znajduje się wyjaśnienie kodu linia po linii.

  • Code wiersz 1-6: Przede wszystkim musimy zaimportować pakiet wymagany do uruchomienia Selenium kod.
  • Code wiersz 8: Utwórz klasę publiczną FirefoxProfil 2.
  • Code wiersz 12: Utwórz obiekt myprofile odwołując się do dokładnej ścieżki.
  • Code wiersz 14: Utwórz obiekt dla Firefox.
  • Code wiersz 16: Maksymalizuj okno.
  • Code linia 18: driver.get służy do nawigacji do podanego URL.
  • Code wiersz 20: Ustaw limit czasu, aby odczekać jakiś czas, zanim przeglądarka załaduje stronę przed przejściem do następnej strony.
  • Code linia 22: Zamknij Firefox.

Zwróć uwagę, że ścieżka w tym fragmencie kodu jest zapisana dokładnie tak, jak pokazano w oryginalnym samouczku. Na prawdziwym komputerze ukośniki odwrotne muszą być poprzedzone sekwencją ucieczki, na przykład „C:\\Users\\guru99\\AppData\\Roaming\\Mozilla\\Firefox\\Profile\\xyzProfile.default”.

Jak korzystać z Firefox Profil w Selenium 4 z FirefoxOpcje

Oba powyższe przykłady kompilują się tylko w stosunku do Selenium 2. Później nastąpiły dwie zmiany i każdy obecny samouczek używa nowszego formularza.

  • ProfileIni wyprowadził się z wewnętrzny podpakiet, więc teraz import to org.openqa.selenium.firefox.ProfilesIni.
  • FirefoxKierowca(FirefoxKonstruktor profilu został usunięty. Profil jest dołączony do FirefoxObiekt opcji i obiekt opcji przekazywany jest do sterownika.
  • Selenium 4 limity czasu przyjmują wartość java.time.Duration zamiast wartości i TimeUnit, więc implicitlyWait(5, TimeUnit.SECONDS) staje się implicitlyWait(Duration.ofSeconds(5)).

Poniższa tabela mapuje każde starsze wywołanie do jego zamiennika.

Wywołanie starszej wersji (Selenium 2) Aktualne połączenie (Selenium 3 i 4)
import org.openqa.selenium.firefox.internal.ProfilesIni; import org.openqa.selenium.firefox.ProfilesIni;
nowych FirefoxKierowca (mój profil) opcje.setProfile(myprofile); nowy FirefoxSterownik (opcje)
domyślnieWait(5, TimeUnit.SECONDS) domyślnieWait(Duration.ofSeconds(5))
System.setProperty dla geckodriver Rozwiązane automatycznie przez Selenium Menedżer

Przykład 1, przepisany na potrzeby bieżącej wersji, wygląda następująco.

import java.time.Duration;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.ProfilesIni;

public class FirefoxProfileSelenium4 {
    public static void main(String[] args) {
        ProfilesIni allProfiles = new ProfilesIni();
        FirefoxProfile myprofile = allProfiles.getProfile("xyzProfile");

        FirefoxOptions options = new FirefoxOptions();
        options.setProfile(myprofile);

        WebDriver driver = new FirefoxDriver(options);
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        driver.get("https://www.google.com");
        driver.quit();
    }
}

Samo wyszukiwanie profilu pozostaje niezmienione: ProfilesIni nadal odczytuje profiles.ini z Firefox Folder danych aplikacji i getProfile nadal zwracają null, gdy nazwa nie pasuje do profilu, dlatego warto dodać sprawdzanie null przed uruchomieniem sterownika. Ten sam obiekt opcji zawiera również argumenty używane w innych miejscach, na przykład dla maksymalizowanie lub zmienianie rozmiaru okna przeglądarki.

Jak ustawić Firefox Preferencje profilu w Selenium

Zapisany profil to tylko połowa sukcesu. Większość automatyzacji wymaga zastosowania kilku preferencji w kodzie, aby to samo zachowanie było zgodne z pakietem na dowolnej maszynie. Metoda setPreference zapisuje te wartości w kopii profilu przed… Firefox uruchamia.

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", "C:\\selenium-downloads");
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
profile.setPreference("dom.webnotifications.enabled", false);
profile.setPreference("intl.accept_languages", "es");

FirefoxOptions options = new FirefoxOptions();
options.setProfile(profile);
WebDriver driver = new FirefoxDriver(options);

Preferencje poniżej obejmują przypadki najczęściej występujące w codziennym pisaniu skryptów.

Preferencja Co kontroluje
przeglądarka.pobierz.listafolderów Ustaw na 2, aby użyć niestandardowego folderu pobierania zamiast domyślnego folderu systemowego.
przeglądarka.pobierz.katalog Ścieżka absolutna Firefox zapisuje pobrane pliki do.
przeglądarka.helperApps.neverAsk.saveToDisk Typy MIME zostały zapisane bez wyświetlania okna dialogowego pobierania.
dom.webnotifications.enabled Ustaw na false, aby wyłączyć powiadomienia push w sieci.
międzynarodowe_akceptowane_języki Nagłówek Accept-Language, przydatny przy uruchamianiu lokalizacji.
nadpisanie.ogólnego.useragenta Zastępuje ciąg agenta użytkownika wysyłany przez przeglądarkę.

Warto znać dwa ograniczenia. Preferencje muszą zostać ustawione przed utworzeniem sterownika, ponieważ WebDriver kopiuje profil podczas uruchamiania, a późniejsze zmiany są ignorowane. WebDriver rezerwuje również niewielki zestaw preferencji potrzebnych do komunikacji z przeglądarką i nadpisuje je, niezależnie od tego, co przypiszesz. Ponieważ te wartości znajdują się w profilu, a nie w skrypcie, są one również przenoszone. testowanie między przeglądarkami uruchom bez żadnych zmian w kodzie testowym.

wspólny Firefox Błędy profilu w Selenium i jak je naprawić

Problemy z profilem zazwyczaj objawiają się błędem kompilacji lub otwarciem przeglądarki z nieprawidłowymi ustawieniami. W tabeli wymieniono najczęściej zgłaszane błędy wraz z ich przyczynami.

Objaw Spowodować Fix
Konstruktor FirefoxKierowca(FirefoxProfil) jest niezdefiniowany Konstruktor został usunięty po Selenium 2. Zawiń profil w FirefoxOpcje i zamiast tego przekaż obiekt opcji.
Nie można rozwiązać importu org.openqa.selenium.firefox.internal.ProfilesIni Klasa wyszła z wewnętrznego podpakietu. Importuj org.openqa.selenium.firefox.ProfilesIni.
Wyjątek NullPointerException w getProfile Nazwa profilu nie pasuje do żadnego wpisu w pliku profiles.ini. Otwórz ponownie menedżera profili i skopiuj dokładnie nazwę, uwzględniając wielkość liter.
Twoje Firefox Nie można załadować profilu. Być może jest on nieobecny lub niedostępny. Inne Firefox Instancja już zawiera profil lub ścieżka do folderu jest nieprawidłowa. Zamknij każdy Firefox okno, a następnie sprawdź ścieżkę na podstawie lokalizacji wymienionych powyżej.
Preferencja nie ma wpływu Zostało ustawione po uruchomieniu sterownika lub WebDriver je zarezerwował. Przenieś każde wywołanie setPreference powyżej FirefoxKonstruktor sterownika.

Jeśli przeglądarka uruchamia się poprawnie, ale skrypt nadal nie działa, przyczyną prawdopodobnie nie jest profil. obsługa wyjątków w Selenium jest zazwyczaj szybszą trasą z tego punktu.

FAQ

Nie. FirefoxDriver nigdy nie edytuje istniejącego profilu. Kopiuje katalog profilu do tymczasowej lokalizacji, stosuje preferencje wymagane przez WebDriver i uruchamia przeglądarkę z tej kopii, dzięki czemu zapisane zakładki i hasła pozostają nienaruszone.

Tak. Każde rozszerzenie zainstalowane w profilu ładuje się wraz z przeglądarką. Możesz również wywołać profile.addExtension(new File(“path/to/extension.xpi”)), aby dołączyć rozszerzenie w czasie wykonywania, co pozwala zachować czystość profilu na dysku.

Python nie ma odpowiednika ProfilesIni. Punkt FirefoxZamiast tego utwórz profil w katalogu profili, a następnie przypisz go do pliku options.profile przed zbudowaniem sterownika. Selenium Python powiązania, a następnie klonuj ten folder dokładnie tak, jak Java robi.

Narzędzia testowe wspomagane przez sztuczną inteligencję porównują preferencje zarejestrowane podczas pomyślnych przebiegów z bieżącym profilem i sygnalizują dryft, na przykład zmianę proxy lub folderu pobierania. Niektóre frameworki wykorzystują również uczenie maszynowe do wykrywania niestabilności profilu, zanim kompilacja zakończy się niepowodzeniem.

Drugi pilot GitHub szybko generuje szablon, ale często emituje usunięty FirefoxKierowca(FirefoxKonstruktor profilu (Profile) poznany ze starszego kodu. Zawsze potwierdzaj użycie sugestii. FirefoxOptions.setProfile i bieżący pakiet przed jego zatwierdzeniem.

Tak. Wywołaj options.addArguments(“-headless”) wraz z options.setProfile(profile). Profil dostarcza preferencje i rozszerzenia dokładnie tak samo jak poprzednio, ponieważ tryb bezgłowy zmienia tylko sposób Firefox renderuje, a nie w jaki sposób odczytuje katalog profilu.

Ponieważ WebDriver działa na kopii tymczasowej i usuwa ją po zakończeniu sesji. Aby zachować zmiany, edytuj profil ręcznie w menedżerze profili lub ustaw preferencje w kodzie, aby każde uruchomienie rozpoczynało się od tego samego, znanego stanu.

Nie zawsze, ale pomaga. Dołączenie profilu do FirefoxOpcje dostarczają preferencje wraz z ładunkiem możliwości, dzięki czemu zdalny węzeł stosuje ten sam folder pobierania, serwer proxy i obsługę certyfikatów, co komputer lokalny.

Podsumuj ten post następująco: