Selenium Firefox Профил: Ръководство за настройка

⚡ Умно обобщение

Firefox профилът съхранява отметките, паролите, добавките и предпочитанията, които принадлежат на един потребител на браузъра, и Selenium WebDriver може да зареди специален профил, така че всяко автоматизирано изпълнение да започва от идентично, предвидимо състояние на браузъра.

  • 🔘 Основни положения на профила: A Firefox Профилът съхранява отметките, запазените пароли, добавките, сертификатите и предпочитанията на един потребител в една папка.
  • ☑️ Местоположение на профила: Windows, Linux и macOS всеки съхранява папки с профили под различен път в потребителската директория.
  • Създаване на профил: Вграденият мениджър на профили се отваря с firefox.exe -p и изгражда чист профил за автоматизация в пет стъпки.
  • 🧪 Code достъп: Класът ProfilesIni чете profiles.ini и getProfile връща посочения профил като FirefoxПрофилен обект.
  • 🛠️ Текущ синтаксис: Selenium 3 и 4 прокарват профила през FirefoxOptions.setProfile, а не FirefoxКонструктор на драйвери.
  • ⚠️ Предпочитания: setPreference контролира папката за изтегляне, известията, езика и обработката на сертификати преди стартирането на браузъра.

Selenium Firefox Ръководство за настройка на профил

Selenium Firefox Профил

Firefox профил е колекция от настройки, персонализиране, добавки и други настройки за персонализиране, които могат да бъдат направени на Firefox Browser. Можете да персонализирате Firefox профил, който да отговаря на вашите Selenium изискване за автоматизация.

Така че, Firefox или всеки друг браузър обработва настройките на SSL сертификатите. Така че автоматизирането им има много смисъл заедно с кода за изпълнение на теста.

Накратко, профилът е личните настройки на потребителя. Когато искате да управлявате надеждна автоматизация на Firefox браузър, препоръчително е да създадете отделен профил. Специализираният профил също така предпазва ежедневните ви данни за сърфиране от тестовото изпълнение, което е първото нещо, което трябва да изключите, когато Selenium Скриптът се държи различно на две машини.

Местоположение на папката на вашия профил на диска

Firefox профилът е точно както го използват различните потребители Firefox. Firefox запазва лична информация, като например отметки, пароли и потребителски предпочитания, които могат да бъдат редактирани, изтривани или създавани с помощта на мениджъра на профили.

Екранната снимка по-долу показва папка с профил, както се появява на диска, кръстена на профила с произволен префикс.

Firefox папката с профил, показана на диска със своя произволен префикс

Местоположението на профила е както следва

  • За Windows > C:\Потребители\ \AppData\Роуминг\Mozilla\Firefox\Профили\име_на_профил.по_подразбиране
  • За Linux > ~/.mozilla/firefox/име_на_профил.default/
  • За Mac OS X > ~/Библиотека/Поддръжка на приложения/Firefox/Профили/име_на_профил.по подразбиране/

За да управлявате успешно Selenium Тест, а Firefox профилът трябва да бъде –

  • Лесно е да се зареди
  • Настройки на прокси, ако е необходимо
  • Други специфични за потребителя настройки въз основа на нуждите от автоматизация

Как да зададете Firefox Профил за Selenium Тестове

Нека разгледаме стъпка по стъпка как да създадем Firefox профил.

Стъпка 1) Затвори Firefox браузър

В първата стъпка затворете Firefox ако вече е отворен. Мениджърът на профили няма да се стартира, докато Firefox прозорецът работи.

Стъпка 2) Open Run (Windows клавиш + R) и въведете firefox.exe –p

Диалоговият прозорец „Изпълнение“ трябва да изглежда като екранната снимка по-долу, преди да натиснете OK.

Windows Стартирайте диалоговия прозорец с въведена команда firefox.exe -p

Забележка: Ако не се отвори, можете да опитате да използвате пълния път, ограден в кавички.

  • На 32 бита Windows„C:\Program Files\Mozilla“ Firefox\firefox.exe” –p
  • На 64 бита Windows (32-битов Firefox): „C:\Program Files (x86)\Mozilla Firefox\firefox.exe” –p

Стъпка 3) Изберете потребителски профил

Сега, диалогов прозорец с име Firefox ще се отвори, както е показано по-долу.

Firefox Диалогов прозорец „Избор на потребителски профил“ показва съществуващите профили

Стъпка 4) Създайте профил

Изберете опцията „Създаване на профил“, показана на следващата екранна снимка, за да стартирате съветника.

Началният екран на съветника за създаване на профили в Firefox мениджър на профили

Сега изберете опцията Създаване на профил от прозореца и ще се отвори съветник. Кликнете върху следващия.

Стъпка 5) Дайте името на вашия профил

Въведете име за профила за автоматизация в полето, маркирано по-долу, и завършете съветника.

Влизане в нов Firefox име на профил в съветника за създаване на профил

Сега вашият профил е готов, можете да изберете своя профил и да го отворите FirefoxОттук нататък профилът се държи като всяка друга сесия в браузъра, така че първи скрипт за WebDriver ще работи срещу него непроменен.

Ще забележите, че новото Firefox прозорецът няма да показва нито една от иконите ви за отметки и любими.

Забележка: Последният избран профил ще се зареди автоматично при следващото Firefox стартиране. Ще трябва да рестартирате мениджъра на профили, ако искате да промените профилите.

Скрипт за автоматизация за Selenium

След като профилът е създаден, следващата стъпка е да го заредите от код. За да получите достъп до новосъздадения Firefox профил в Selenium За да тестваме софтуера WebDriver, трябва да използваме вградения клас ProfilesIni на WebDriver и неговия метод getProfile, както е показано по-долу.

⚠️ Бележка към версията: откъсите в този раздел са оригиналните Selenium 2 форма. В текущия Selenium освобождава, в което живее класът org.openqa.selenium.firefox.ProfilesIni - .вътрешен подпакетът е бил премахнат — и профилът е предаден на драйвера чрез FirefoxОпции. Вижте FirefoxРазделът с опции по-долу за съвременния еквивалент.

Selenium код за профила

Това е код за имплементиране на профил, който може да бъде вграден в Selenium код.

ProfilesIni profile = new ProfilesIni();

// това ще създаде обект за Firefox профил

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

// това ще инициализира Firefox шофьор

WebDriver driver = new FirefoxDriver(myprofile)

Нека видим имплементацията на този код в следващите примери.

Firefox Пример за профил 1

Първият пример зарежда профил по име. Екранната снимка по-долу показва същия скрипт в редактора.

Firefox Пример за профил 1 скрипт, зареждащ профил по име в редактора

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

}

Обяснение за кода

По-долу е обяснението на кода ред по ред.

  • Code ред 2-7: Първо трябва да импортираме пакета, необходим за изпълнението на Selenium код.
  • Code ред 8: Направете публичен клас „FirefoxПрофил."
  • Code ред 9: Създайте обект (трябва да имате основни познания за концепциите на обектно-ориентираното програмиране).
  • Code ред 10-11: Трябва да инициализираме Firefox профил с обекта myprofile.
  • Code ред 13: Създаване на обект за Firefox.
  • Code ред 15: Максимизиране на прозореца.
  • Code ред 17: driver.get се използва за навигация до даденото URL.
  • Code ред 19: Зададеното време за изчакване се използва за известно време, така че браузърът да може да зареди страницата, преди да премине към следващата страница.
  • Code ред 21: Затвори Firefox.

Нека видим още един пример.

Firefox Пример за профил 2

Вторият пример пропуска profiles.ini и сочи директно към папката с профили, както показва екранната снимка на редактора.

Firefox Пример за профил 2, сочещ скрипт FirefoxПрофил по път до папка

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

Обяснение за кода

По-долу е обяснението на кода ред по ред.

  • Code ред 1-6: Първо трябва да импортираме пакета, необходим за изпълнението на Selenium код.
  • Code ред 8: Създаване на публичен клас FirefoxПрофил2.
  • Code ред 12: Създайте обекта на myprofile, като посочите точния път.
  • Code ред 14: Създаване на обект за Firefox.
  • Code ред 16: Максимизиране на прозореца.
  • Code ред 18: driver.get се използва за навигация до даденото URL.
  • Code ред 20: Зададеното време за изчакване се използва за известно време, така че браузърът да може да зареди страницата, преди да премине към следващата страница.
  • Code ред 22: Затвори Firefox.

Обърнете внимание, че пътят в този фрагмент е написан точно както е показано в оригиналния урок. На реална машина обратните наклонени черти трябва да бъдат екранирани, например „C:\\Users\\guru99\\AppData\\Roaming\\Mozilla\\Firefox\\Профили\\xyzПрофил.по подразбиране“.

Как да използвате a Firefox Профили в Selenium 4 с FirefoxНастроики

И двата примера по-горе се компилират само срещу Selenium 2. Две неща се промениха след това и всеки текущ урок използва по-новата форма.

  • ProfilesIni се изнесе от вътрешен подпакет, така че импортът вече е org.openqa.selenium.firefox.ProfilesIni.
  • - FirefoxШофьор(FirefoxКонструкторът на профила) беше премахнат. Профилът е прикрепен към FirefoxОбектът с опции и обектът с опции се предава на драйвера.
  • Selenium 4 таймаута приемат java.time.Duration вместо стойност плюс TimeUnit, така че implicitlyWait(5, TimeUnit.SECONDS) става implicitlyWait(Duration.ofSeconds(5)).

Таблицата по-долу съпоставя всяко наследено повикване с неговия заместител.

Старо обаждане (Selenium 2) Текущо повикване (Selenium 3 и 4)
импортиране на org.openqa.selenium.firefox.internal.ProfilesIni; импортиране на org.openqa.selenium.firefox.ProfilesIni;
на нови FirefoxШофьор (моят профил) опции.setProfile(моят профил); нов FirefoxШофьор (опции)
имплицитноИзчакване(5, ВремеваЕдиница.СЕКУНДИ) имплицитноИзчакване(Продължителност.Секунди(5))
System.setProperty за geckodriver Решено автоматично от Selenium Мениджър

Пренаписан спрямо текуща версия, Пример 1 изглежда така.

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

Самото търсене на профил е непроменено: ProfilesIni все още чете profiles.ini от Firefox папката с данни за приложението и getProfile все още връща null, когато името не съвпада с профил, така че е добре да се добави проверка за null, преди да се стартира драйверът. Същият обект с опции съдържа и аргументите, използвани другаде, като например тези за максимизиране или преоразмеряване на прозореца на браузъра.

Как да зададете Firefox Предпочитания за профил в Selenium

Запазеният профил е само половината от историята. Повечето автоматизации изискват няколко предпочитания, приложени в кода, така че същото поведение да следва пакета на всяка машина. Методът setPreference записва тези стойности в копието на профила преди... Firefox стартира.

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

Предпочитанията по-долу обхващат случаите, които се срещат най-често в ежедневния скриптинг.

Предпочитание Какво контролира
браузър.изтегляне.списъкспапки Задайте на 2, за да използвате персонализирана папка за изтегляне вместо системната по подразбиране.
браузър.изтегляне.dir Абсолютният път Firefox запазва изтеглянията в.
browser.helperApps.neverAsk.saveToDisk MIME типовете са запазени без показване на диалоговия прозорец за изтегляне.
dom.webnotifications.enabled Задайте на „false“, за да потиснете подканите за уеб push известия.
intl.accept_languages Заглавката Accept-Language, полезна за локализация.
общо.потребител.замяна Заменя низа на потребителския агент, изпратен от браузъра.

Струва си да се знаят две ограничения. Предпочитанията трябва да бъдат зададени преди създаването на драйвера, защото WebDriver копира профила при стартиране и по-късните промени се игнорират. WebDriver също така запазва малък набор от предпочитания, от които се нуждае, за да комуникира с браузъра, и презаписва тези, които зададете. Тъй като тези стойности се намират в профила, а не в скрипта, те също се пренасят през... кръстосано тестване на браузъра изпълнява се без никаква промяна в тестовия код.

Общ Firefox Грешки в профила в Selenium и как да ги поправим

Проблемите с профилите обикновено се проявяват като грешка при компилиране или като браузър, който се отваря с грешни настройки. Таблицата изброява най-често докладваните грешки, заедно с причините за всяка от тях.

симптом Причина Фиксирайте
Конструкторът FirefoxШофьор(FirefoxПрофил) е неопределен Конструкторът беше премахнат след Selenium 2. Увийте профила вътре FirefoxОпции и вместо това предайте обекта с опции.
Не може да се разреши импортирането на org.openqa.selenium.firefox.internal.ProfilesIni Класът се премести извън вътрешния подпакет. Импортирайте org.openqa.selenium.firefox.ProfilesIni.
NullPointerException на getProfile Името на профила не съвпада с никой запис в profiles.ini. Отворете отново мениджъра на профили и копирайте името точно, включително главните и малките букви.
Вашият Firefox Профилът не може да бъде зареден. Възможно е да липсва или да е недостъпен. Друг Firefox екземплярът вече съдържа профила или пътят до папката е грешен. Затваряйте всеки Firefox прозорец, след което проверете пътя спрямо местоположенията, изброени по-горе.
Предпочитанието няма ефект Зададено е след стартирането на драйвера или WebDriver го запазва. Преместете всяко извикване на setPreference над FirefoxКонструктор на драйвери.

Ако браузърът стартира правилно, но скриптът все още не работи след това, вероятно причината не е в профила. обработка на изключения в Selenium обикновено е по-бързият маршрут от тази точка.

Въпроси и Отговори

Не. FirefoxDriver никога не редактира съществуващ профил. Той копира директорията на профила във временно място, прилага предпочитанията, изисквани от WebDriver, и стартира браузъра от това копие, така че запазените ви отметки и пароли остават недокоснати.

Да. Всяко разширение, инсталирано в профила, се зарежда с браузъра. Можете също да извикате profile.addExtension(new File(“path/to/extension.xpi”)), за да прикачите такова по време на изпълнение, което ще поддържа профила на диска чист.

Python няма еквивалент на ProfilesIni. Точка FirefoxПрофилирайте в директорията с профили, след което го присвоете на options.profile, преди да изградите драйвера. Selenium Python след това клонирайте тази папка точно както Java прави.

Инструментите за тестване, подпомагани от изкуствен интелект, сравняват предпочитанията, заснети при успешно изпълнение, с текущия профил и отклонението на флаговете, като например прокси сървър или папка за изтегляне, която се е променила. Някои рамки също използват машинно обучение, за да открият нестабилност, свързана с профила, преди той да не успее при изграждането.

Копилот на GitHub генерира шаблона бързо, но често излъчва премахнатия FirefoxШофьор(FirefoxКонструкторът на профила е научен от по-стар код. Винаги проверявайте дали предложението използва FirefoxOptions.setProfile и текущия пакет, преди да го commit-нете.

Да. Извикайте options.addArguments(“-headless”) заедно с options.setProfile(profile). Профилът предоставя предпочитания и разширения точно както преди, тъй като режимът „headless“ променя само как Firefox рендерира, а не как чете директорията си с профили.

Защото WebDriver работи върху временно копие и го изтрива, когато сесията приключи. За да запазите промените, редактирайте профила ръчно в мениджъра на профили или задайте предпочитанията в кода, така че всяко изпълнение да започва от едно и също известно състояние.

Не винаги, но помага. Прикачване на профила към Firefox„Опции“ доставя предпочитанията с полезния товар за възможности, така че отдалеченият възел прилага същата папка за изтегляния, прокси и обработка на сертификати, както вашата локална машина.

Обобщете тази публикация с: