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.emit
must be called withtestPass
andtestFail
messages. These messages must be passed atestInfo
object, with aname
andcategory
property. Thecategory
property could be the name of thedescribe
block in jasmine/mocha, theFeature
in cucumber, or the class name in something like jUnit. Thename
property could be the name of anit
block in jasmine/mocha, theScenario
in cucumber, or the method name in something like jUnit. -
runner.runTestPreparer
must be called before any tests are run. -
runner.getConfig().onComplete
must 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
failedCount
property and optionally aspecResults
object 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.