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.
It also contains a command line interface that allows to copy or create profiles.
"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 http://saadtazi.com 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', 'http://saadtazi.com');
// attach your newly created profile
myProfile.encoded(function(encodedProfile) {
capabilities.set('firefox_profile', encodedProfile);
// start the browser
var wd = new webdriver.Builder().
withCapabilities(capabilities).
build();
// woot!
wd.get('http://en.wikipedia.org');
});
});
/**************************************************
/* 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?
fp.updatePreferences();
// 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();
browser.init({
browserName:'firefox',
// set firefox_profile capabilities HERE!!!!
firefox_profile: zippedProfile
}).
// woOot!!
get('http://en.wikipedia.org');
});
});
You can also copy an existing profile... Check the doc FirefoxProfile.copy(...)
.
It allows to copy (from profile name or profile directory) or create firefox profiles with installed extensions. Note that it does not allow to load user preferences... yet.
Run node_modules/bin/firefox-profile -h
to get the help message:
usage: firefox-profile [-v] [-p profilename || -c profile_dir] [-e extension_path1 [-e extension_path2]] [-o destination_dir || --ouput destination_dir || -b [file_path] || --base64 [file_path]]
-v: verbose mode (same as --verbose)
-h: show this message (same as --help)
-p profilename: profile to copy (same as --profile)
-c profile_dir: profile folder path to copy (same as --copy)
-e extension_path: file path to extension to add to the profile. Can be present multiple times (same as --extension)
-o destination_dir (or --output destination_dir): folder where the profile will be created.
-b [file_path](or --base64): write the encoded firefox profile to stdout or to file_path if specified.
The API documentation can be found in doc/.
It can be regenerated using grunt docs
.
Requires apidox - listed in devDependencies.
mocha
# or
grunt mochacov:unit
grunt mochacov:coverage
Generates doc/coverage.html
add documentation and commentswrite testsfix 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.