firefox profile for selenium WebDriverJs, admc/wd or any other node selenium driver that supports capabilities


Firefox Profile for Selenium WebdriverJS, admc/wd or any other library that allows you to set capabilities.

This class allows you to:

  • create a firefox profile
  • use an existing profile (by specifying a path)
  • use an existing user profile (by specifying a name)
  • add extensions to your profile,
  • specify proxy settings,
  • set the user preferences...

More info on user preferences here.

"real" npm support is on its way... soon... maybe... Open an issue if you need it... Use npm:

npm install firefox-profile

Make sure you have selenium server running... or use 'selenium-webdriver/remote' class.

  • create a profile
  • modify the profile:
    • setPreference(key, value)
    • addExtension(path/To/Extenstion.xpi) or addExtension(path/To/Unpacked/Extension/)
  • create firefox capabilities and set the 'firefox_profile' capability
  • attach the capabilitites to your webdriver
     * with selenium webdriverJs
     * installs firebug 
     * and make the url that is opened on new tabs
    var webdriver = require('selenium-webdriver');
    // create profile
    var FirefoxProfile = require('firefox-profile');
    var myProfile = new FirefoxProfile();
    // you can add an extension by specifying the path to the xpi file 
    // or to the unzipped extension directory
    myProfile.addExtension('test/extensions/firebug-1.12.4-fx.xpi', function() {
        var capabilities = webdriver.Capabilities.firefox();
        // you can set firefox preferences BEFORE calling encoded()
        myProfile.setPreference('browser.newtab.url', '');
        // attach your newly created profile
        myProfile.encoded(function(encodedProfile) {
            capabilities.set('firefox_profile', encodedProfile);
            // start the browser
            var wd = new webdriver.Builder().
            // woot!
    /* with admc/wd
    /* installs firebug, and make it active by default
    var FirefoxProfile = require('firefox-profile'),
        wd = require('wd');
    // set some userPrefs if needed
    // Note: make sure you call encoded() after setting some userPrefs
    var fp = new FirefoxProfile();
    // activate and open firebug by default for all sites
    fp.setPreference('extensions.firebug.allPagesActivation', 'on');
    // activate the console panel
    fp.setPreference('extensions.firebug.console.enableSites', true);
    // show the console panel
    fp.setPreference('extensions.firebug.defaultPanelName', 'console');
    // done with prefs?
    // you can install multiple extensions at the same time
    fp.addExtensions(['./test/extensions/firebug-1.12.4-fx.xpi'], function() {
        fp.encoded(function(zippedProfile) {
            browser = wd.promiseChainRemote();
              // set firefox_profile capabilities HERE!!!!
              firefox_profile: zippedProfile
            // woOot!!

You can also copy an existing profile... Check the doc FirefoxProfile.copy(...).

The API documentation can be found in doc/.

It can be regenerated using grunt docs. Requires apidox - listed in devDependencies.

# or
grunt mochacov:unit
grunt mochacov:coverage

Generates doc/coverage.html

  • add documentation and comments
  • write tests
  • fix bugs
  • write more tests
  • fix more bugs
  • clean tmp directory on process 'exit' and 'SIGINT'

This class is actually a port of the python class.

Open a github issue.