Как запретить Selenium создавать временные профили Firefox с помощью веб-драйвера?

Я использую Selenium Web Driver API с Java. Каждый раз, когда я хочу отладить свои тестовые случаи, в каталоге временных файлов создается временный профиль для Firefox. Это головная боль в двух отношениях.

  1. Создание профиля определенно занимает лишнее время и занимает лишнее место.
  2. Я не могу установить какие-либо надстройки, которые будут доступны при следующем запуске тестовых случаев.

Как мне обойти это?


person Ranhiru Jude Cooray    schedule 22.07.2011    source источник
comment
хороший вопрос - я тоже ищу ответ. это проблема и с селеном 1   -  person rs79    schedule 22.07.2011
comment
Вы подробно объясните эту тему.... stackoverflow.com/a/40521731   -  person Rasel    schedule 13.11.2016


Ответы (10)


Вы можете управлять тем, как драйвер Firefox выбирает профиль. Задайте для свойства webdriver.firefox.profile имя профиля, который вы хотите использовать. Большинство людей думают, что это плохая идея, потому что вы унаследуете все файлы cookie, содержимое кеша и и т. д.. предыдущего использования профиля, но это разрешено, если вы действительно хотите это сделать.

Например:

System.setProperty("webdriver.firefox.profile", "MySeleniumProfile");
WebDriver driver = new FirefoxDriver(...);

ОБНОВЛЕНИЕ — от Ranhiru

Как я справился с этим для Java

FirefoxProfile profile = new FirefoxProfile(new File("D:\\Selenium Profile"));                  
WebDriver driver = new FirefoxDriver(profile);

Затем я изменил настройки в Firefox, чтобы очистить все файлы cookie и кеш при выходе. Посмотрите здесь, как это сделать.

person Ross Patterson    schedule 26.07.2011
comment
Then I changed settings in Firefox to clear all cookies and cache when exiting. - Я не думаю, что это необходимо, поскольку Selenium все равно будет создавать временные профили. За основу берет указанный вами, т.е. копирует настройки, поэтому исходный профиль не должен меняться. - person Vsevolod Golovanov; 13.02.2013
comment
Это не решает проблему №1. Как говорится в предыдущих ответах, временный профиль создается в любом случае, поэтому расходуются время и пространство. - person gamliela; 17.10.2013
comment
@VsevolodGolovanov, вы нашли какое-нибудь решение для этого? в настоящее время я сталкиваюсь с этой проблемой. - person Yaswanth; 13.09.2017
comment
@abc, 1. Меня это беспокоило только потому, что в то время собственные DevTools FF были неадекватными, и мне иногда требовался Firebug. Возможности установить базовый профиль было достаточно, чтобы исправить это при необходимости. 2. Сегодня DevTools от FF достаточно развиты, а Firebug мертв, так что это больше не проблема. 3. Я все равно переключился с FF на Chrome для тестирования пользовательского интерфейса в настоящее время, потому что переход FF на незавершенную Marionette сломал некоторые вещи. 4. Падение производительности Temp Profile для меня никогда не было проблемой - оно незначительно, если сами тесты жирные. - person Vsevolod Golovanov; 13.09.2017
comment
@abc, для справки, тест Chrome в настоящее время занимает 5 секунд для запуска на моем ПК для разработчиков, не помню, сколько это было с FF. - person Vsevolod Golovanov; 13.09.2017
comment
@VsevolodGolovanov, в моем случае мы запускаем наши приложения на платформе unix. Мы вызываем firefox и читаем что-то с веб-сайтов, когда он запущен, firefox создаст временный профиль как rust_mozprofile в каталоге «/ tmp». Поэтому, если firefox внезапно остановится, мой rust_mozprofile, который находится в каталоге «/ tmp», не будет удален. Поэтому я просто хочу перенаправить путь с «/tmp» на «/home». Если у вас есть знания о перенаправлении пути с «/tmp» на «/home». пожалуйста, дайте мне знать. - person Yaswanth; 13.09.2017

Обязательно позвоните

driver.quit();

вместо

driver.close();

close() не будет удалять временные файлы

person Szabolcs Filep    schedule 25.05.2015
comment
Это должен быть комментарий, а не ответ. Как это отвечает на вопрос? - person stuxnetting; 24.09.2015
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его сообщением — вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно репутация, вы сможете комментировать любой пост. - person Johannes Klauß; 24.09.2015
comment
@JohannesKlauß Это дает ответ именно на эту часть ответа = занимает лишнее место. Если вы неправильно вызовете driver.quit(), вы получите массу гигабайт фиктивных данных профиля. - person m3nda; 26.10.2015
comment
.close() также является решением для реализации nodejs, которое может оставить временную папку с 5 МБ файлов. - person David De Sloovere; 26.04.2016
comment
Обратите внимание, что close() не совпадает с quit(), если имеется более одного окна. - person user202729; 02.01.2021

На самом деле ответ был довольно прост после того, как я просмотрел этот вопрос, где я нашел документацию. Я нашел FirefoxProfile, а конструктор выбрал путь к профилю Firefox.

WebDriver driver = null;
FirefoxProfile profile = new FirefoxProfile(new File("C:\\Users\\Ranhiru\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\qp1nizdo.Selenium"));
driver = new FirefoxDriver(profile);

Я создал новый профиль, запустив «Firefox.exe» с флагом -p.

Firefox.exe -p

Установил расширения, которые мне были нужны для этого профиля, и я был готов к работе! :)

Обновить

Неважно, назначаете вы профиль или нет, все равно создается временный профиль во временной папке. Создав и назначив профиль, вы получаете возможность использовать firebug/xpather/ваше любимое расширение при тестировании.

person Ranhiru Jude Cooray    schedule 26.07.2011
comment
Я потратил несколько часов на выяснение, почему он не будет использовать указанный профиль... В официальном документе написано webdriver.firefox.profile The name of the profile to use when starting firefox. Он не упоминает, что он по-прежнему создает новый анонимный профиль, что он просто использует указанный в качестве источника. О, спасибо за обновление, теперь я понял. - person Vsevolod Golovanov; 23.01.2013

Вы можете загрузить FirefoxWebDriver нужными плагинами, вызвав метод addExtension(File) в классе FirefoxProfile.

Пример:

try {
    File firebug = new File("C:\\FFPlugins\\firebug-1.7.3.xpi");
    File xpathChecker = new File("C:\\FFPlugins\\xpath_checker-0.4.4-fx.xpi");
    profile.addExtension(firebug);
    profile.setPreference("extensions.firebug.currentVersion", "1.7.3");
    profile.addExtension(xpathChecker);
    profile.setPreference("extensions.xpath_checker.currentVersion", "0.4.4");
} catch(IOException e) {
    e.printStackTrace();
}
driver = new FirefoxDriver(profile);
person Kanishka Dilshan    schedule 24.04.2012

Я создал собственный профиль, выполнив команду:

firefox -profileManager 

(затем добавление любых исключений и т. д., которые мне требуются - из-за того, что селен открывает чистый профиль/экземпляр каждый раз, когда исключения теряются)

Затем я напрямую создавал свой Firefox с этим профилем, используя следующее:

private static String profilePath = "C:\\fitnesse\\Selenesse\\FFProfiles";
private static FirefoxProfile ffprofile = new FirefoxProfile(profilePath); 
private static IWebDriver driver = new FirefoxDriver(ffprofile);
person Woodman81    schedule 10.04.2013

Вы не можете запретить Selenium создавать временные файлы, даже если вы явно указали их. Но вы можете очистить его после завершения тестов.

TemporaryFilesystem.getDefaultTmpFS().deleteTemporaryFiles()

Протестировано под MacOS и Ubuntu.

person Max    schedule 31.05.2013

  1. Запустите firefox командой: firefox -P
  2. Создайте новый профиль (например, webdriver1), добавьте необходимые плагины и т. д.
  3. #P1# <блочная цитата>
    DesiredCapabilities desiredCapabilities =
        new DesiredCapabilities("firefox", "", Platform.ANY);
    FirefoxProfile profile = new ProfilesIni().getProfile("webdriver1");
    desiredCapabilities.setCapability("firefox_profile", profile);
    WebDriver webdriver = new RemoteWebDriver(desiredCapabilities);
    
person jnr    schedule 09.07.2014

Вы всегда можете использовать профиль с именем default, который используется пользователем по умолчанию. Там у вас будут все ваши куки, плагины и т. д., и вы сможете использовать их без осложнений, используя

System.setProperty("webdriver.firefox.profile", "default");

перед созданием WebDriver

WebDriver driver = new FirefoxDriver();

для создания нового профиля, который вы можете выполнить в оболочке firefox -p, которая покажет вам

Добавить новый профиль в Firefox

и получить новый профиль кроме уже существующего default. Это даст вам всю свободу, которую вы хотите.

person EliuX    schedule 29.04.2016

Вы можете указать Selenium напрямую использовать определенный профиль. Вот один из примеров: http://automationtricks.blogspot.com/2010/05/how-to-run-test-cases-in-specified.html

person Pavel Janicek    schedule 22.07.2011
comment
Это относится к Selenium RC. Я использую Selenium Web Driver API. - person Ranhiru Jude Cooray; 22.07.2011

вы можете указать другое место для временных файлов перед запуском программы, так что ваша программа может не останавливаться из-за «нехватки памяти»

if(!new File("c:/temp_data").isDirectory())  //to check dir exist

    FileUtils.forceMkdir(new File("c:/temp_data")); //create dir if not exists    
    TemporaryFilesystem.setTemporaryDirectory(new File("c:/temp_data")); //set new dir as temp file path for selenium    
    FirefoxProfile profile = new FirefoxProfile();
person vickisys    schedule 07.05.2015