Capturing browsers on your own can be a tedious and time-consuming task. However, Karma can automate this for you. Simply add the browsers you would like to capture into the configuration file.

browsers: ['Chrome']

Then, Karma will take care of auto-capturing these browsers, as well as killing them after the job is over.


Most of the browser launchers need to be loaded as plugins.

Available browser launchers #

Here's an example of how to add Firefox to your testing suite:

# Install the launcher first with NPM:
$ npm install karma-firefox-launcher --save-dev

And then, inside your configuration file, add the browser name in browsers array.

module.exports = function(config) {
    browsers : ['Chrome', 'Firefox']

Also, keep in mind that the browsers configuration setting is empty by default.

Of course, you can write custom plugins too!

Capturing any browser manually #

You can also capture browsers by simply opening http://<hostname>:<port>/, where <hostname> is the IP address or hostname of the machine where the Karma server is running and <port> is the port where the Karma server is listening (by default it's 9876). With the default settings in place, just point your browser to http://localhost:9876/.

This allows you to capture a browser on any device, such as a tablet or a phone, that is on the same network as the machine running Karma (or using a local tunnel).

Configured launchers #

Some of the launchers can also be configured:

sauceLabs: {
  username: 'michael_jackson'

Or defined as a configured launcher:

customLaunchers: {
  chrome_without_security: {
    base: 'Chrome',
    flags: ['--disable-web-security']
  sauce_chrome_win: {
    base: 'SauceLabs',
    browserName: 'chrome',
    platform: 'windows'

A display name can be set for any custom launcher. If set, this name will be used for reporting instead of the user agent. Here is a code snippet example explaining how to set a display name for a custom launcher.

customLaunchers: {
  chrome_without_security: {
    base: 'Chrome',
    flags: ['--disable-web-security'],
    displayName: 'Chrome w/o security'

If the definition is as above, the browser will be displayed as Chrome w/o security in logs and reports.

Correct path to browser binary #

Each plugin has some default paths where to find the browser binary on particular OS. You can override these settings by <BROWSER>_BIN ENV variable, or alternatively by creating a symlink.

POSIX shells #

# Changing the path to the Chrome binary
$ export CHROME_BIN=/usr/local/bin/my-chrome-build

# Changing the path to the Chrome Canary binary
$ export CHROME_CANARY_BIN=/usr/local/bin/my-chrome-build

# Changing the path to the PhantomJs binary
$ export PHANTOMJS_BIN=$HOME/local/bin/phantomjs

Windows cmd.exe #

C:> SET IE_BIN=C:\Program Files\Internet Explorer\iexplore.exe

Windows Powershell #

$Env:FIREFOX_BIN = 'c:\Program Files (x86)\Mozilla Firefox 4.0 Beta 6\firefox.exe'

Custom browsers #

// in the karma.conf.js
browsers: ['/usr/local/bin/'],

// from cli
karma start --browsers /usr/local/bin/

The browser scripts need to take one argument, which is the URL with the ID-parameter to be used to connect to the server. The supplied ID is used by the server to keep track of which specific browser is captured.