Update Feb 2014 - This answer is no longer valid. Use Paolo Moretti's answer below.
There may be a better way to do this but currently I am just executing these as concurrent Grunt tasks.
1) Add the grunt concurrent plugin
npm install grunt-concurrent --save-dev
2) Add a task for each browser under grunt.initConfig. We can add the browser as an arg to re-use our configuration file.
protractor: {
options: {
keepAlive: true,
singleRun: false,
configFile: "test/protractor.conf.js"
},
run_chrome: {
options: {
args: {
browser: "chrome"
}
}
},
run_firefox: {
options: {
args: {
browser: "firefox"
}
}
}
},
3) Register these as tasks;
grunt.registerTask('protractor-chrome', ['protractor:run_chrome']);
grunt.registerTask('protractor-firefox', ['protractor:run_firefox']);
4) Create your concurrent task under grunt.initConfig
concurrent: {
protractor_test: ['protractor-chrome', 'protractor-firefox']
},
5) Add the grunt task for concurrent
grunt.registerTask('protractor-e2e', ['concurrent:protractor_test']);
And executing that should give you concurrent protractor tests.