Protractor can work with any test framework that is adapted here.
Each file details the adapter for one test framework. Each file must export a run function with the interface:
/**
* @param {Runner} runner The Protractor runner instance.
* @param {Array.<string>} specs A list of absolute filenames.
* @return {q.Promise} Promise resolved with the test results
*/
exports.run = function(runner, specs)-
runner.emitmust be called withtestPassandtestFailmessages. These messages must be passed atestInfoobject, with anameandcategoryproperty. Thecategoryproperty could be the name of thedescribeblock in jasmine/mocha, theFeaturein cucumber, or the class name in something like jUnit. Thenameproperty could be the name of anitblock in jasmine/mocha, theScenarioin cucumber, or the method name in something like jUnit. -
runner.runTestPreparermust be called before any tests are run. -
runner.getConfig().onCompletemust be called when tests are finished. It might return a promise, in which caseexports.run's promise should not resolve until afteronComplete's promise resolves. -
The returned promise must be resolved when tests are finished and it should return a results object. This object must have a
failedCountproperty and optionally aspecResultsobject of the following structure:
specResults = [{
description: string,
assertions: [{
passed: boolean,
errorMsg: string,
stackTrace: string
}],
duration: integer
}]
If you have created/adapted a custom framework and want it added to Protractor core please send a PR so it can evaluated for addition as an official supported framework. In the meantime you can instruct Protractor to use your own framework via the config file:
exports.config = {
// set to "custom" instead of jasmine/mocha
framework: 'custom',
// path relative to the current config file
frameworkPath: './frameworks/my_custom_jasmine.js',
};More on this at the configuration.
Disclaimer: current framework interface can change without a major version bump.