Selenium Firefox Profil: Installationsguide

⚡ Smart sammanfattning

Firefox profilen lagrar bokmärken, lösenord, tillägg och inställningar som tillhör en webbläsaranvändare, och Selenium WebDriver kan ladda en dedikerad profil så att varje automatiserad körning startar från ett identiskt, förutsägbart webbläsartillstånd.

  • 🔘 Grunderna i profilen: A Firefox En profil innehåller en användares bokmärken, sparade lösenord, tillägg, certifikat och inställningar i en enda mapp.
  • ☑️ Profilplats: Windows, Linux och macOS Varje profilmapp lagras under en annan sökväg i användarkatalogen.
  • Profilskapande: Den inbyggda profilhanteraren öppnas med firefox.exe -p och bygger en ren automatiseringsprofil i fem steg.
  • 🧪 Code tillgång: Klassen ProfilesIni läser profiles.ini och getProfile returnerar den namngivna profilen som en FirefoxProfilobjekt.
  • 🛠️ Nuvarande syntax: Selenium 3 och 4 passerar profilen igenom FirefoxOptions.setProfile snarare än FirefoxDrivrutinskonstruktör.
  • ⚠️ Inställningar: setPreference styr nedladdningsmappen, aviseringar, språk och certifikathantering innan webbläsaren startas.

Selenium Firefox Guide för profilinstallation

Selenium Firefox Profil

Firefox profil är samlingen av inställningar, anpassningar, tillägg och andra personaliseringsinställningar som kan göras på Firefox Browser. Du kan anpassa Firefox profil som passar din Selenium automatiseringskrav.

Också, Firefox eller någon annan webbläsare hanterar SSL-certifikatinställningarna. Så att automatisera dem är mycket vettigt tillsammans med testexekveringskoden.

Kort sagt är en profil en användares personliga inställningar. När du vill köra en pålitlig automatisering på en Firefox webbläsare rekommenderas det att skapa en separat profil. En dedikerad profil håller också dina dagliga webbläsardata borta från testkörningen, vilket är det första man bör utesluta när en Selenium Skriptet beter sig olika på två maskiner.

Plats för din profilmapp på disken

Firefox profilen är precis som olika användare använder Firefox. Firefox sparar personlig information som bokmärken, lösenord och användarinställningar som kan redigeras, raderas eller skapas med hjälp av profilhanteraren.

Skärmdumpen nedan visar en profilmapp som den visas på disken, namngiven efter profilen med ett slumpmässigt prefix.

Firefox profilmapp som visas på disken med dess slumpmässiga prefix

Placeringen av profilen är som följer

  • För Windows > C:\Användare\ \AppData\Roaming\Mozilla\Firefox\Profiler\profilnamn.standard
  • För Linux > ~/.mozilla/firefox/profilnamn.standard/
  • För Mac OS X > ~/Bibliotek/Programsupport/Firefox/Profiles/profile_name.default/

För att kunna köra en framgångsrik Selenium Testa, a Firefox profilen ska vara -

  • Lätt att ladda
  • Proxyinställningar vid behov
  • Andra användarspecifika inställningar baserade på automatiseringsbehov

Hur man ställer in Firefox Profil för Selenium Tester

Låt oss se steg för steg hur man skapar en Firefox profil.

Steg 1) Stäng Firefox webbläsare

I första steget, stäng Firefox om den redan är öppen. Profilhanteraren startar inte medan en Firefox fönstret körs.

Steg 2) Öppna Kör (Windows tangent + R) och skriv firefox.exe –p

Dialogrutan Kör bör se ut som skärmdumpen nedan innan du trycker på OK.

Windows Kör dialogrutan med kommandot firefox.exe -p inskrivet

Obs: Om den inte öppnas kan du prova att använda den fullständiga sökvägen inom citationstecken.

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

Steg 3) Välj användarprofil

Nu en dialogruta med namnet Firefox kommer att öppnas, som visas nedan.

Firefox Dialogrutan Välj användarprofil med en lista över befintliga profiler

Steg 4) Skapa profil

Välj alternativet Skapa profil som visas i nästa skärmbild för att starta guiden.

Välkomstskärmen för guiden Skapa profil i Firefox profilhanterare

Välj nu alternativet Skapa profil i fönstret, så öppnas en guide. Klicka på nästa.

Steg 5) Ge ditt profilnamn

Skriv ett namn för automatiseringsprofilen i det markerade fältet nedan och avsluta guiden.

Att ange ett nytt Firefox profilnamn i guiden Skapa profil

Nu är din profil klar, du kan välja din profil och öppna FirefoxHärifrån beter sig profilen som vilken annan webbläsarsession som helst, så en första WebDriver-skriptet kommer att kämpa emot det oförändrat.

Du kommer att märka att den nya Firefox fönstret visar inte några av dina bokmärken och favoritikoner.

Obs: Den senast valda profilen laddas automatiskt vid nästa Firefox lansera. Du måste starta om profilhanteraren om du vill ändra profiler.

Automation Script för Selenium

När profilen är skapad är nästa steg att ladda den från kod. För att komma åt den nyskapade profilen Firefox profil i en Selenium För att testa WebDriver-programvaran behöver vi använda WebDrivers inbyggda klass ProfilesIni och dess metod getProfile som visas nedan.

⚠️ Versionsinformation: utdragen i det här avsnittet är originalet Selenium 2-formulär. I nuvarande Selenium släpper ut klassens liv i org.openqa.selenium.firefox.ProfilesIni - Den .inre delpaketet släpptes — och profilen överlämnas till föraren via FirefoxAlternativ. Se FirefoxAlternativavsnittet nedan för den moderna motsvarigheten.

Selenium kod för profilen

Detta är en kod för att implementera en profil, som kan bäddas in i Selenium koda.

ProfilesIni profile = new ProfilesIni();

// detta kommer att skapa ett objekt för Firefox profil

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

// detta kommer att initiera Firefox chaufför

WebDriver driver = new FirefoxDriver(myprofile)

Låt oss se implementeringen av denna kod i följande exempel.

Firefox Profilexempel 1

Det första exemplet laddar en profil efter namn. Skärmdumpen nedan visar samma skript i redigeraren.

Firefox Profilexempel 1-skript som laddar en profil efter namn i redigeraren

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

}

Förklaring till koden

Nedan följer förklaringen av kod rad för rad.

  • Code rad 2-7: Först och främst måste vi importera paketet som krävs för att köra Selenium koda.
  • Code rad 8: Skapa en offentlig klass “FirefoxProfil."
  • Code rad 9: Skapa ett objekt (du behöver ha grundläggande kunskaper om OOP-koncept).
  • Code rad 10-11: Vi behöver initiera Firefox profil med objektet för minprofil.
  • Code rad 13: Skapa objekt för Firefox.
  • Code rad 15: Maximera fönstret.
  • Code rad 17: driver.get används för att navigera till det givna URL.
  • Code rad 19: Ange timeout används för att vänta en viss tid så att webbläsaren kan ladda sidan innan den fortsätter till nästa sida.
  • Code rad 21: Stäng Firefox.

Låt oss se ytterligare ett exempel.

Firefox Profilexempel 2

Det andra exemplet hoppar över profiles.ini och pekar direkt på profilmappen, som redigerarens skärmdump visar.

Firefox Profilexempel 2 skriptpekning FirefoxProfil vid en mappsökväg

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

Förklaring till koden

Nedan följer förklaringen av kod rad för rad.

  • Code rad 1-6: Först och främst måste vi importera paketet som krävs för att köra Selenium koda.
  • Code rad 8: Skapa en offentlig klass FirefoxProfil2.
  • Code rad 12: Skapa objektet myprofile genom att referera till den exakta sökvägen.
  • Code rad 14: Skapa objekt för Firefox.
  • Code rad 16: Maximera fönstret.
  • Code rad 18: driver.get används för att navigera till det givna URL.
  • Code rad 20: Ange timeout används för att vänta en viss tid så att webbläsaren kan ladda sidan innan den fortsätter till nästa sida.
  • Code rad 22: Stäng Firefox.

Observera att sökvägen i det här kodavsnittet är skriven exakt som den ursprungliga handledningen visar. På en riktig maskin måste bakåtsnedstreck vara escape-tecken, till exempel “C:\\Users\\guru99\\AppData\\Roaming\\Mozilla\\Firefox\\Profiler\\xyzProfile.standard”.

Hur man använder a Firefox Profil i Selenium 4 med FirefoxMontering

Båda exemplen ovan kompilerar endast mot Selenium 2. Två saker ändrades efteråt, och varje aktuell handledning använder den nyare formen.

  • ProfilesIni flyttade ut ur inre underpaket, så importen är nu org.openqa.selenium.firefox.ProfilesIni.
  • Ocuco-landskapet FirefoxFörare(FirefoxProfil)konstruktorn togs bort. Profilen är kopplad till en FirefoxOptions-objektet och options-objektet skickas till drivrutinen.
  • Selenium 4 timeouts tar ett java.time.Duration-värde istället för ett värde plus en TimeUnit, så implicitlyWait(5, TimeUnit.SECONDS) blir implicitlyWait(Duration.ofSeconds(5)).

Tabellen nedan mappar varje äldre anrop till dess ersättning.

Äldre samtal (Selenium 2) Nuvarande samtal (Selenium 3 och 4)
importera org.openqa.selenium.firefox.internal.ProfilesIni; importera org.openqa.selenium.firefox.ProfilesIni;
ny FirefoxFörare (min profil) options.setProfile(minprofil); new FirefoxFörare (tillval)
implicitlyWait(5, TimeUnit.SECONDS) implicitlyWait(Duration.ofSeconds(5))
System.setProperty för geckodriver Löst automatiskt av Selenium chef

Omskrivet mot en aktuell utgåva, ser exempel 1 ut så här.

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

Själva profilsökningen är oförändrad: ProfilesIni läser fortfarande profiles.ini från Firefox application-data folder och getProfile returnerar fortfarande null när namnet inte matchar en profil, så en null-kontroll är värd att lägga till innan drivrutinen startar. Samma options-objekt bär också argumenten som används på andra ställen, till exempel de för maximera eller ändra storlek på webbläsarfönstret.

Hur man ställer in Firefox Profilinställningar i Selenium

En sparad profil är bara halva historien. De flesta automatiseringar kräver en handfull inställningar som tillämpas i kod så att samma beteende följer sviten på vilken maskin som helst. Metoden setPreference skriver dessa värden till profilkopian innan Firefox lanserar.

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

Inställningarna nedan täcker de fall som förekommer oftast i det dagliga skriptarbetet.

Företräde Vad den kontrollerar
webbläsare.nedladdning.mapplista Ställ in på 2 för att använda en anpassad nedladdningsmapp istället för systemets standardmapp.
webbläsare.nedladdning.dir Den absoluta vägen Firefox sparar nedladdningar i.
browser.helperApps.neverAsk.saveToDisk MIME-typer sparades utan att nedladdningsdialogrutan visades.
dom.webnotifications.aktiverade Ställ in på falskt för att undertrycka push-aviseringar på webben.
intl.accept_languages Accept-Language-headern, användbar för lokaliseringskörningar.
generell.useragent.override Ersätter användaragentsträngen som skickas av webbläsaren.

Två begränsningar är värda att känna till. Inställningar måste ställas in innan drivrutinen skapas, eftersom WebDriver kopierar profilen vid start och senare ändringar ignoreras. WebDriver reserverar också en liten uppsättning inställningar som behövs för att kommunicera med webbläsaren, och den skriver över dessa oavsett vad du tilldelar. Eftersom dessa värden finns i profilen snarare än i skriptet, överförs de också över en korsa webbläsartestning köras utan att ändra testkoden.

Gemensam Firefox Profilfel i Selenium och hur man fixar dem

Profilproblem uppstår vanligtvis som ett kompileringsfel eller som en webbläsare som öppnas med fel inställningar. Tabellen listar de fel som rapporteras oftast, tillsammans med orsaken till varje fel.

Symptom Orsak Fast
Konstruktören FirefoxFörare(FirefoxProfil) är odefinierad Konstruktören togs bort efter Selenium 2. Linda in profilen FirefoxOptions och skicka options-objektet istället.
Kan inte lösa import org.openqa.selenium.firefox.internal.ProfilesIni Klassen flyttade ut ur det interna delpaketet. Importera org.openqa.selenium.firefox.ProfilesIni.
NullPointerException på getProfile Profilnamnet matchar ingen post i profiles.ini. Öppna profilhanteraren igen och kopiera namnet exakt, inklusive versaler och gemener.
Dina Firefox Profilen kan inte laddas. Den kan saknas eller vara oåtkomlig. Annan Firefox instansen innehåller redan profilen, eller så är mappens sökväg fel. Stäng varje Firefox fönstret och verifiera sedan sökvägen mot platserna som anges ovan.
En preferens har ingen effekt Den ställdes in efter att drivrutinen startade, eller så reserverar WebDriver den. Flytta varje setPreference-anrop ovanför FirefoxDrivrutinskonstruktör.

Om webbläsaren startar korrekt men skriptet fortfarande misslyckas efteråt, är profilen förmodligen inte orsaken. undantagshantering i Selenium är vanligtvis den snabbaste vägen från den punkten.

Vanliga frågor

Nej. FirefoxDrivrutinen redigerar aldrig en befintlig profil. Den kopierar profilkatalogen till en tillfällig plats, tillämpar de inställningar som WebDriver kräver och startar webbläsaren från den kopian, så att dina sparade bokmärken och lösenord förblir orörda.

Ja. Alla tillägg som installeras i profilen laddas med webbläsaren. Du kan också anropa profile.addExtension(new File("path/to/extension.xpi")) för att koppla ett tillägg vid körning, vilket håller profilen på disken ren.

Python har ingen motsvarighet till ProfilesIni. FirefoxProfile i profilkatalogen istället, tilldela den sedan till options.profile innan du skapar drivrutinen. Selenium Python bindningar klonar sedan den mappen exakt som Java gör.

AI-assisterade testverktyg jämför de preferenser som registrerats vid godkända körningar med den aktuella profilen och flaggar avvikelser, till exempel en proxy eller nedladdningsmapp som ändrats. Vissa ramverk använder också maskininlärning för att upptäcka profilrelaterade fläckar innan en build misslyckas.

GitHub Copilot genererar standardtemat snabbt, men den avger ofta den borttagna FirefoxFörare(FirefoxProfile)-konstruktorn lärd från äldre kod. Bekräfta alltid förslaget använder FirefoxOptions.setProfile och det aktuella paketet innan det laddas upp.

Ja. Anropa options.addArguments("-headless") tillsammans med options.setProfile(profile). Profilen tillhandahåller inställningar och tillägg exakt som tidigare, eftersom headless-läget bara ändrar hur Firefox renderar, inte hur den läser sin profilkatalog.

Eftersom WebDriver arbetar med en tillfällig kopia och tar bort den när sessionen avslutas. För att behålla ändringarna, redigera profilen manuellt i profilhanteraren eller ange inställningarna i kod så att varje körning startar från samma kända tillstånd.

Inte alltid, men det hjälper. Koppla profilen till FirefoxOptions levererar inställningarna med nyttolasten capabilities, så en fjärrnod tillämpar samma nedladdningsmapp, proxy och certifikathantering som din lokala maskin.

Sammanfatta detta inlägg med: