Во время инициализации FirefoxDriver всегда происходит создание нового профиля браузера, предназначенного для тестирования. Драйвер никогда автоматически не использует ни один из профилей на Вашей локальной машине, даже тот, который установлен профилем Firefox по-умолчанию. Поэтому любые изменения в Вашем текущем профиле никак не отразятся на выполнении тестов.
Если Вы думаете, что при создании FirefoxDriver без параметров Вы не работаете с профилями, то это совершенно неверно.
driver = new FirefoxDriver();
Инициализируя драйвер вызовом такого простого конструктора, Вы все равно создаете новый профиль. Приведенный выше код полностью идентичен следующему:
FirefoxProfile profile = new FirefoxProfile(); driver = new FirefoxDriver(profile);
Новый анонимный профиль создается всегда и при любых условиях, и удаляется при завершении работы драйвера. Создание профиля происходит в темповой директории, заданной свойством java.io.tmpdir
. Для Windows стандартное значение этого свойства соответствует каталогу %APPDATA%/Local/Temp
. Профиль размещается в папке с префиксом «anonymous» и суффиксом «webdriver-profile», например:
anonymous3152602350088684422webdriver-profile
Для работы с профилем WebDriver предоставляет нам 2 функциональные возможности: использовать существующий профиль или создать новый. Но на самом деле, драйвер всегда создает новый профиль, поэтому использование существующего профиля — это просто возможность манипулировать созданием нового на его основе.
Рассмотрим все способы для создания профиля:
- Существующий профиль можно передать параметром в свойство
webdriver.firefox.profile
:System.setProperty("webdriver.firefox.profile", "profile_name");
В этом случае при инициализации драйвера
new FirefoxDriver()
будет выполнен поиск локального профиля с именем «profile_name» и на его основе создан новый профиль для теста. В случае, если профиль не будет найден, Вы получите исключение org.openqa.selenium.WebDriverException: Firefox profile ‘profile_name’ named in system property ‘webdriver.firefox.profile’ not found.
Если же в конструктор FirefoxDriver был явно передан профиль для запуска, то значение свойстваwebdriver.firefox.profile
просто игнорируется. - Второй способ поиска существующего профиля на машине:
ProfilesIni allProfiles = new ProfilesIni(); FirefoxProfile profile = allProfiles.getProfile("profile_name"); driver = new FirefoxDriver(profile);
В отличие от первого способа, в случае, если профиль с именем «profile_name» не будет найден, исключение не возникнет, переменная
profile
будет равна null и просто создастся новый анонимный профиль. - Создание и настройка нового профиля:
FirefoxProfile profile = new FirefoxProfile(); driver = new FirefoxDriver(profile);
В этом случае происходит создание анонимного профиля, как если бы мы не вмешивались в создание профиля вовсе. Но инициализируя драйвер таким образом, мы получаем доступ к создаваемому профилю и можем задавать его настройки.
- Конструктор FirefoxProfile в качестве переменной может также принимать существующий профиль, чтобы используя его за основу, создать новый. Преимущества перед способами 1 и 2 очевидны: такой профиль не должен быть установлен на локальной машине, он может быть просто прикреплен к проекту и свободно перемещаться вместе с ним:
File profileDir = new File("src/test/resources/my_profile"); FirefoxProfile profile = new FirefoxProfile(profileDir); driver = new FirefoxDriver(profile);
Чаще всего доступ к профилям используется для активации всевозможных плагинов, настройки нативных событий или обработки SSL сертификатов.
Татьяна, у Вас очень крутые статьи для быстрого освоения работы с WebDriver-ом. Что-то от Вас давно нет новый постов.. Читатели переживают:)