开发者

How to stop Selenium from creating temporary Firefox Profiles using Web Driver?

I am using Selenium Web Driver API with Java. Every time I want to debug my test cases, a temporary profile for Firefox is created in the temporary files directory. This is a headache in two ways.

  1. It definitely is taking unnecessary time to create a profile and is taking unnecessary space.
  2. I cannot install any add开发者_开发问答ons that will be available next time I launch my test cases.

How do I get around this?


You can control how the Firefox driver chooses the profile. Set the webdriver.firefox.profile property to the name of the profile you want to use. Most folks think this is a bad idea, because you'll inherit all the cookies, cache contents, etc. of the previous uses of the profile, but it's allowed if you really want to do it.

For example:

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

UPDATE - From Ranhiru

How I handled it for Java

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

Then I changed settings in Firefox to clear all cookies and cache when exiting. Look here on how to do it.


Be sure you call

driver.quit();

instead of

driver.close();

close() will not delete temporary files


The answer was actually pretty easy after I went through this question where I found the documentation. I found the FirefoxProfile class and the constructor took the path to the Firefox Profile.

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

I created a new profile by running "Firefox.exe" with the -p flag.

Firefox.exe -p

Installed the extensions I needed to this profile and I was good to go! :)

Update

It does not matter whether you assign a profile or not, the temporary profile in the temp folder is created nevertheless. By creating and assigning a profile you get the chance to use firebug/xpather/your favorite extension when testing.


You can load the FirefoxWebDriver with the desired plugins by calling addExtension(File) method in FirefoxProfile class.

Example:

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


I have create a custom profile by running the command:

firefox -profileManager 

(then adding any exceptions etc I require - as due to selenium opening clean profile/instance each time the exceptions are lost)

I was then directly creating my Firefox with this profile using the following:

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


You can not stop Selenium from creating temporary files even you explicitly specified one. But you can clear it after tests completed.

TemporaryFilesystem.getDefaultTmpFS().deleteTemporaryFiles()

Tested under MacOS and Ubuntu.


  1. Start firefox with: firefox -P
  2. Create new profile (e.g. webdriver1), add necessary plugins etc.
  3. Add to your test case:

    DesiredCapabilities desiredCapabilities =
        new DesiredCapabilities("firefox", "", Platform.ANY);
    FirefoxProfile profile = new ProfilesIni().getProfile("webdriver1");
    desiredCapabilities.setCapability("firefox_profile", profile);
    WebDriver webdriver = new RemoteWebDriver(desiredCapabilities);
    


You can use always the profile named default, which is the one used by default by the user. There you will have all your cookies, plugins, etc. and you will be able to use it with no complications, using

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

before creating the WebDriver

WebDriver driver = new FirefoxDriver();

for creating some new profile you can execute in the shell firefox -p which will show you

How to stop Selenium from creating temporary Firefox Profiles using Web Driver?

and get a new profile besides the already existing default. That will give you all the freedom you want.


You can tell Selenium directly to use specific profile. Here is one of examples: http://automationtricks.blogspot.com/2010/05/how-to-run-test-cases-in-specified.html


you can specify different location for temporary files before the program begins, so that your program may not stop due to "lack of memory space"

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜