node package manager

nemo-firefox-profile

nemo-firefox-profile

Firefox profile for Nemo automation framework. nemo-firefox-profile is a nemo-plugin written using firefox-profile-js.

Nemo Installation

Install nemo and nemo-firefox-profile

 npm install nemo --save-dev
 npm install nemo-firefox-profile --save-dev

nemo-firefox-profile Registration

Add nemo-firefox-profile to your nemo config under plugins section in config/config.json file like below. Make sure priority<100 to allow plugin to register before nemo initializes selenium-webdriver

"plugins" : {
        "firefox_profile": {
                   "module": "nemo-firefox-profile",
                   "priority": 99,
                   "arguments": [
                          {
                             "firefoxPreferences": {
                               "browser.download.folderList": 2,
                               "browser.download.dir": "/Users/nemoUser",
                               "browser.helperApps.neverAsk.saveToDisk": "text/csv"
                             }
                          }
                   ]
        }
  }

Plugin Arguments

You can pass firefox preferences to nemo via plugin arguments like below,

"plugins": {
    "firefox-profile": {
      "module": "nemo-firefox-profile",
      "arguments": [
        {
           "firefoxPreferences": {
                "browser.download.folderList": 2,
                "browser.download.dir": "/Users/nemoUser",
                "browser.helperApps.neverAsk.saveToDisk": "text/csv"
           },
           "firefoxProfileDirectory": "/path/to/profile's folder",
           "firefoxExtensions": [
                "example/resources/modify_headers-0.7.1.1-fx.xpi",
                "example/resources/firebug-2.0.0.xpi"
           ]
        }
      ],
      "priority": 99
    }
 }

You must pass either firefoxPreferences with custom preferences or firefoxProfileDirectory to load existing Firefox profile OR both. You can also include add-ons to firefox instance by providing them under firefoxExtensions as an array argument

Once the plugin is configured correctly, nemo-firefox-profile would update "serverCaps" as below

  "serverCaps": {
    "firefox_profile": {zipped, base64 encoded string of the profile directory for use with remote WebDriver JSON wire protocol}
  }

Example

A sample nemo test example/nemoFirefoxProfileExample.js is written to demonstrate how to use nemo-firefox-profile. Custom firefox preferences are provided under example/config/config.json. We also add a custom header using modify-headers extension

Once you clone the plugin, at the root level execute following,

npm install
DEBUG=nemo* node example/nemoFirefoxProfileExample.js

You will see a bunch of nemo logs and a firefox launched with a blank window. In the address bar you can type about:config and check whether your custom firefox preferences were applied or not. Accept firefox risk page and in the address bar type browser.download.dir. You will see the value to be /Users/nemoUser and status to be user set. You can also see that modify-headers is added to the browser with header Custom-Header being set to value Cookie. modify-headers extension could be found at the top right corner of the browser as red icon. That's it, you were able to configure nemo-firefox-profile correctly and able to successfully set custom firefox preferences. Browser will close automatically after 60s (timeout set so that users could test firefox preferences).

Acknowledgement

Thank you @saadtazi for your work on firefox-profile-js