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.
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.
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.
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.
Trin 4) Opret profil
Vælg indstillingen Opret profil, som vist på næste skærmbillede, for at starte guiden.
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.
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.
// 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.
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.







