Selenium Firefox Profil: Opsætningsvejledning

⚡ Smart opsummering

Firefox profilen gemmer bogmærker, adgangskoder, tilføjelser og præferencer, der tilhører én browserbruger, og Selenium WebDriver kan indlæse en dedikeret profil, så hver automatiseret kørsel starter fra en identisk, forudsigelig browsertilstand.

  • 🔘 Grundlæggende om profilen: A Firefox En profil indeholder én brugers bogmærker, gemte adgangskoder, tilføjelser, certifikater og præferencer i en enkelt mappe.
  • ☑️ Profilplacering: Windows, Linux og macOS hver gemmer profilmapper under en forskellig sti i brugermappen.
  • ✅ Oprettelse af profil: Den indbyggede profilhåndtering åbner med firefox.exe -p og opbygger en ren automatiseringsprofil i fem trin.
  • 🧪 Code adgang: ProfilesIni-klassen læser profiles.ini, og getProfile returnerer den navngivne profil som en FirefoxProfilobjekt.
  • 🛠️ Nuværende syntaks: Selenium 3 og 4 fører profilen igennem FirefoxOptions.setProfile i stedet for FirefoxDriver konstruktør.
  • ⚠️ Præferencer: setPreference styrer downloadmappen, notifikationer, sprog og certifikathåndtering, før browseren starter.

Selenium Firefox Vejledning til profilopsætning

Selenium Firefox Profil

Firefox profil er samlingen af ​​indstillinger, tilpasning, tilføjelser og andre personaliseringsindstillinger, der kan udføres på Firefox Browser. Du kan tilpasse Firefox profil, der passer til din Selenium automatiseringskrav.

Således, Firefox eller enhver anden browser håndterer SSL-certifikatindstillingerne. Så automatisering af dem giver meget mening sammen med testudførelseskoden.

Kort sagt er en profil en brugers personlige indstillinger. Når du vil køre en pålidelig automatisering på en Firefox browser, anbefales det at oprette en separat profil. En dedikeret profil holder også dine daglige browserdata ude af testkørslen, hvilket er den første ting, man skal udelukke, når en Selenium Scriptet opfører sig forskelligt på to maskiner.

Placeringen af ​​din profilmappe på disken

Firefox profil er ligesom forskellige brugere bruger Firefox. Firefox gemmer personlige oplysninger såsom bogmærker, adgangskoder og brugerpræferencer, som kan redigeres, slettes eller oprettes ved hjælp af profiladministratoren.

Skærmbilledet nedenfor viser en profilmappe, som den vises på disken, opkaldt efter profilen med et tilfældigt præfiks.

Firefox profilmappe vist på disk med dens tilfældige præfiks

Placering af profil er som følger

  • Til Windows > C:\Brugere\ \AppData\Roaming\Mozilla\Firefox\Profiler\profilnavn.standard
  • Til Linux > ~/.mozilla/firefox/profilnavn.standard/
  • For Mac OS X > ~/Bibliotek/Programsupport/Firefox/Profiles/profile_name.default/

For at køre en vellykket Selenium Test, en Firefox profilen skal være -

  • Let at ilægge
  • Proxyindstillinger, hvis det kræves
  • Andre brugerspecifikke indstillinger baseret på automatiseringsbehov

Sådan indstilles Firefox Profil til Selenium Tests

Lad os se trin for trin, hvordan man opretter en Firefox profil.

Trin 1) Luk Firefox browser

I første trin, luk Firefox hvis den allerede er åben. Profiladministratoren starter ikke, mens en Firefox vinduet kører.

Trin 2) Åbn Kør (Windows tast + R) og skriv firefox.exe –p

Dialogboksen Kør skal se ud som skærmbilledet nedenfor, før du trykker på OK.

Windows Kør dialogboksen med kommandoen firefox.exe -p indtastet

Bemærk: Hvis den ikke åbner, kan du prøve at bruge den fulde sti i anførselstegn.

  • På 32 bit Windows: “C:\Programmer\Mozilla Firefox"\firefox.exe" –p
  • På 64 bit Windows (32-bit Firefox): “C:\Programmer (x86)\Mozilla Firefox"\firefox.exe" –p

Trin 3) Vælg brugerprofil

Nu en dialogboks med navnet Firefox åbnes, som vist nedenfor.

Firefox Dialogboksen Vælg brugerprofil med en liste over eksisterende profiler

Trin 4) Opret profil

Vælg indstillingen Opret profil, som vist på næste skærmbillede, for at starte guiden.

Velkomstskærmen i guiden Opret profil i Firefox profiladministrator

Vælg nu muligheden Opret profil fra vinduet, og en guide åbnes. Klik på næste.

Trin 5) Giv dit profilnavn

Skriv et navn til automatiseringsprofilen i det markerede felt nedenfor, og afslut guiden.

Indtastning af et nyt Firefox profilnavn i guiden Opret profil

Nu er din profil klar, du kan vælge din profil og åbne FirefoxHerfra opfører profilen sig som enhver anden browsersession, så en første WebDriver-script vil løbe uændret imod det.

Du vil bemærke, at den nye Firefox vinduet vil ikke vise nogen af ​​dine bogmærker og favoritikoner.

Bemærk: Den sidst valgte profil indlæses automatisk ved næste Firefox lancering. Du skal genstarte profiladministratoren, hvis du ønsker at ændre profiler.

Automation script til Selenium

Når profilen er oprettet, er næste trin at indlæse den fra koden. For at få adgang til den nyoprettede profil Firefox profil i en Selenium I en WebDriver-softwaretest skal vi bruge WebDrivers indbyggede klasse ProfilesIni og dens metode getProfile som vist nedenfor.

⚠️ Versionsnotat: Uddragene i dette afsnit er originalerne Selenium 2. formular. I nuværende Selenium frigiver klassen lever i org.openqa.selenium.firefox.ProfilesIni - Den .indre delpakken blev droppet — og profilen gives til chaufføren via FirefoxValgmuligheder. Se FirefoxAfsnittet om muligheder nedenfor for den moderne ækvivalent.

Selenium kode til profilen

Dette er kode til at implementere en profil, som kan integreres i Selenium kode.

ProfilesIni profile = new ProfilesIni();

// dette vil oprette et objekt for Firefox profil

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

// dette vil initialisere Firefox driver

WebDriver driver = new FirefoxDriver(myprofile)

Lad os se implementeringen af ​​denne kode i de følgende eksempler.

Firefox Profileksempel 1

Det første eksempel indlæser en profil efter navn. Skærmbilledet nedenfor viser det samme script i editoren.

Firefox Profileksempel 1-script indlæser en profil efter navn i editoren

// 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();
}

}

Forklaring til koden

Nedenfor er forklaringen af ​​kode linje for linje.

  • Code linje 2-7: Først og fremmest skal vi importere den pakke, der kræves for at køre Selenium kode.
  • Code linje 8: Lav en offentlig klasse “FirefoxProfil."
  • Code linje 9: Lav et objekt (du skal have grundlæggende kendskab til OOP-begreber).
  • Code linje 10-11: Vi skal initialisere Firefox profil med objektet for minprofil.
  • Code linje 13: Opret objekt til Firefox.
  • Code linje 15: Maksimer vindue.
  • Code linje 17: driver.get bruges til at navigere til den givne URL.
  • Code linje 19: Angiv timeout bruges til at vente et stykke tid, så browseren kan indlæse siden, før den fortsætter til næste side.
  • Code linje 21: Luk Firefox.

Lad os se endnu et eksempel.

Firefox Profileksempel 2

Det andet eksempel springer profiles.ini over og peger direkte på profilmappen, som skærmbilledet i redigeringsprogrammet viser.

Firefox Profileksempel 2 scriptpegning FirefoxProfil på en mappesti

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();
    }

Forklaring til koden

Nedenfor er forklaringen af ​​kode linje for linje.

  • Code linje 1-6: Først og fremmest skal vi importere den pakke, der kræves for at køre Selenium kode.
  • Code linje 8: Opret en offentlig klasse FirefoxProfil2.
  • Code linje 12: Lav objektet myprofile ved at referere til den nøjagtige sti.
  • Code linje 14: Opret objekt til Firefox.
  • Code linje 16: Maksimer vindue.
  • Code linje 18: driver.get bruges til at navigere til den givne URL.
  • Code linje 20: Angiv timeout bruges til at vente et stykke tid, så browseren kan indlæse siden, før den fortsætter til næste side.
  • Code linje 22: Luk Firefox.

Bemærk, at stien i dette uddrag er skrevet præcis som den originale vejledning viser den. På en rigtig maskine skal omvendte skråstreger escapes, for eksempel “C:\\Users\\guru99\\AppData\\Roaming\\Mozilla\\Firefox\\Profiler\\xyzProfile.standard”.

Sådan bruges a Firefox Profil i Selenium 4 med FirefoxIndstillinger

Begge eksempler ovenfor kompilerer kun mod Selenium 2. To ting ændrede sig bagefter, og alle nuværende tutorials bruger den nyere form.

  • ProfilesIni flyttede ud af interne underpakke, så importen er nu org.openqa.selenium.firefox.ProfilesIni.
  • FirefoxChauffør(FirefoxProfil)-konstruktøren blev fjernet. Profilen er knyttet til en FirefoxOptions-objektet, og options-objektet sendes til driveren.
  • Selenium 4 timeouts tager en java.time.Duration i stedet for en værdi plus en TimeUnit, så implicitlyWait(5, TimeUnit.SECONDS) bliver til implicitlyWait(Duration.ofSeconds(5)).

Tabellen nedenfor knytter hvert ældre kald til dets erstatning.

Ældre opkald (Selenium 2) Aktuelt opkald (Selenium 3 og 4)
import org.openqa.selenium.firefox.internal.ProfilesIni; import org.openqa.selenium.firefox.ProfilerIni;
ny FirefoxChauffør (min profil) options.setProfile(minprofil); new FirefoxFører (ekstraudstyr)
implicitVent(5, Tidsenhed.SEKUNDER) implicitWait(Varighed.afSekunder(5))
System.setProperty for geckodriver Løst automatisk af Selenium Manager

Omskrevet i forhold til en nuværende udgivelse, ser Eksempel 1 således ud.

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();
    }
}

Selve profilopslaget er uændret: ProfilesIni læser stadig profiles.ini fra Firefox application-data folder og getProfile returnerer stadig null, når navnet ikke matcher en profil, så en null-kontrol er værd at tilføje, før driveren starter. Det samme optionsobjekt bærer også de argumenter, der bruges andre steder, såsom dem for maksimering eller ændring af størrelsen på browservinduet.

Sådan indstilles Firefox Profilpræferencer i Selenium

En gemt profil er kun halvdelen af ​​historien. Det meste automatisering kræver en håndfuld præferencer anvendt i kode, så den samme adfærd følger suiten på enhver maskine. Metoden setPreference skriver disse værdier ind i profilkopien før Firefox lancerer.

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);

Præferencerne nedenfor dækker de tilfælde, der oftest opstår i den daglige scripting.

Preference Hvad den kontrollerer
browser.download.mappeListe Indstil til 2 for at bruge en brugerdefineret downloadmappe i stedet for systemstandarden.
browser.download.dir Den absolutte vej Firefox gemmer downloads i.
browser.helperApps.neverAsk.saveToDisk MIME-typer gemmes uden at vise downloaddialogboksen.
dom.webnotifikationer.aktiveret Indstil til falsk for at undertrykke push-notifikationer fra nettet.
intl.accept_languages Accept-Language-headeren, nyttig til lokaliseringskørsler.
generel.brugeragent.tilsidesættelse Erstatter brugeragentstrengen, der sendes af browseren.

To begrænsninger er værd at kende. Præferencer skal indstilles, før driveren oprettes, fordi WebDriver kopierer profilen ved opstart, og senere ændringer ignoreres. WebDriver reserverer også et lille sæt præferencer, som den har brug for for at kunne kommunikere med browseren, og den overskriver dem, uanset hvad du tildeler. Fordi disse værdier findes i profilen snarere end i scriptet, overføres de også til en test på tværs af browsere køre uden ændringer i testkoden.

Fælles Firefox Profilfejl i Selenium og hvordan man fikser dem

Profilproblemer opstår normalt som en kompileringsfejl eller som en browser, der åbner med de forkerte indstillinger. Tabellen viser de fejl, der rapporteres oftest, sammen med årsagerne til hver enkelt.

Symptom Årsag Fix
Konstruktøren FirefoxChauffør(FirefoxProfil) er udefineret Konstruktøren blev fjernet efter Selenium 2. Pak profilen ind FirefoxOptions og send i stedet options-objektet.
Kan ikke fortolke import af org.openqa.selenium.firefox.internal.ProfilesIni Klassen flyttede ud af den interne underpakke. Importer org.openqa.selenium.firefox.ProfilesIni.
NullPointerException på getProfile Profilnavnet matcher ikke nogen poster i profiles.ini. Genåbn profiladministratoren, og kopier navnet præcist, inklusive store og små bogstaver.
Din Firefox Profilen kan ikke indlæses. Den mangler muligvis eller er utilgængelig. En anden Firefox instansen indeholder allerede profilen, eller mappestien er forkert. Luk alle Firefox vinduet, og bekræft derefter stien i forhold til placeringerne ovenfor.
En præference har ingen effekt Den blev indstillet efter driveren startede, eller WebDriver reserverer den. Flyt hvert setPreference-kald over FirefoxDriver konstruktør.

Hvis browseren starter korrekt, men scriptet stadig fejler bagefter, er profilen sandsynligvis ikke årsagen. undtagelseshåndtering i Selenium er normalt den hurtigste rute fra det punkt.

Ofte Stillede Spørgsmål

Nej. FirefoxDriver redigerer aldrig en eksisterende profil. Den kopierer profilmappen til en midlertidig placering, anvender de præferencer, som WebDriver kræver, og starter browseren fra den kopi, så dine gemte bogmærker og adgangskoder forbliver uændrede.

Ja. Enhver udvidelse, der er installeret i profilen, indlæses sammen med browseren. Du kan også kalde profile.addExtension(new File("path/to/extension.xpi")) for at vedhæfte en under kørsel, hvilket holder profilen på disken ren.

Python har ingen ProfilesIni-ækvivalent. Punkt FirefoxProfile i profilmappen i stedet, og tildel den derefter til options.profile, før du bygger driveren. Selenium Python bindinger, kloner derefter den mappe præcis som Java gør.

AI-assisterede testværktøjer sammenligner de præferencer, der er registreret ved beståede kørsel, med den aktuelle profil og markerer afvigelser, f.eks. en proxy eller downloadmappe, der er ændret. Nogle frameworks bruger også maskinlæring til at opdage profilrelaterede ustabile egenskaber, før et build fejler.

GitHub Copilot genererer standardteksten hurtigt, men den udsender ofte den fjernede FirefoxChauffør(FirefoxProfile)-konstruktør lært fra ældre kode. Bekræft altid forslagets anvendelser FirefoxOptions.setProfile og den aktuelle pakke før commit den.

Ja. Kald options.addArguments("-headless") sammen med options.setProfile(profile). Profilen leverer præferencer og udvidelser præcis som før, da headless-tilstanden kun ændrer hvordan Firefox gengiver, ikke hvordan den læser sin profilmappe.

Fordi WebDriver arbejder på en midlertidig kopi og sletter den, når sessionen slutter. For at beholde ændringerne skal du redigere profilen manuelt i profiladministratoren eller angive præferencer i kode, så hver kørsel starter fra den samme kendte tilstand.

Ikke altid, men det hjælper. Vedhæfter profilen til FirefoxOptions leverer præferencerne med capabilities-nyttelasten, så en fjernnode anvender den samme downloadmappe, proxy og certifikathåndtering som din lokale maskine.

Opsummer dette indlæg med: