Hantera Firefoxprofiler i Selenium

I de flesta tillämpningar av seleniumtester krävs det att man har kontroll över hur webbläsaren är uppsatt. Förra veckan stötte jag på ett problem med en envis certifikatvarning som vägrade ge med sig och gjorde att inga skript ville köra utan inblandning av den mänskliga faktorn.

Eftersom Selenium startar en ny fräsch profil av webbläsaren varje gång det körs hjälpte det inte att lägga till undantag för certifikatet vid körning utan lösningen blev att skapa en profil i Firefox och sedan säga åt seleniumservern att alltid använda den profilen. I profilen kan jag sedan göra alla inställningar för webbläsaren som jag vill ha dem; t.ex stänga av alla dialogrutor som inte behöver visas och installera nödvändiga addons.

Att skapa en ny profil i Firefox är enkelt genom profilhanteraren som man kommer åt genom kommandot firefox.exe -ProfileManager. Klurigare är det att få seleniumservern att alltid starta den profilen. Efter lite letande hittade jag information om hur det går till. I batchfilen som startar min server (eller  i kommandoraden mo man startar manuellt) lägger man till -firefoxProfileTemplate [profilens sökväg]

Så när jag skapat min profil som jag döpte till selenium i C:\selenium_server\fx_profiles\ lade jag till raden till startkommandot som då ser ut såhär:

java -jar ”C:\selenium_server\selenium-server.jar” -port 8887 -log c:\seleniumlog.log -firefoxProfileTemplate C:\selenium_server\fx_profiles\selenium -trustAllSSLcertificates

En bra förteckning av seleniumserver-växlarna finns på http://mojo.codehaus.org/selenium-maven-plugin/start-server-mojo.html

Effektivt fulhack

Utöver certifikat-problemet dök det dessutom i just det här testfallet upp en dialogruta efter inloggning, säkerhetsvarning, som Selenium inte kunde upptäcka eller klicka på. Det innebar att sidan inte laddades och testet timade ut. Sökningar på hur andra löst problemet resulterade i de mest komplicerade lösningar med externa skript som höll reda på när en sådan ruta dök upp och klickade på den och diverse andra fantasifulla lösningar.

Min egen lösning var att helt enkelt säga till skripet att trycka på enter-tangenten tills sidan laddats. Enter-trycket stängde rutan och störde ingenting annat.

Ibland har man inte tid eller behov av någon snygg generell lösning utan vill bara ta sig förbi hindret fort för att komma till kärnan av testet och då tycker jag det är absolut befogat att fulhacka till det såhär.

2 reaktioner på ”Hantera Firefoxprofiler i Selenium

  1. Tack för båda tipsen Oscar!
    Detta har jag nytta av i ett pågående projekt.
    Fråga: Hur funkar det med cache när man kör en specifik profil? Sparas den per profil? Om så, rensar du ut den efter en körning eller görs det automagiskt av Selenium?

  2. Selenium är duktigt på att hantera cachen så länge du startar en ny instans vid varje test. Jag har för mig att Selenium kopierar hela profilen temporärt varje gång en ny instans skapas.

    Själv har jag aldrig haft några issues med cache i testfallen (check-fallen?)

Kommentarer inaktiverade.