123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const fs = require("fs");
- const path = require("path");
- const yargs = require("yargs");
- /**
- * The command line interface for interacting with the Protractor runner.
- * It takes care of parsing command line options.
- *
- * Values from command line options override values from the config.
- */
- let args = [];
- process.argv.slice(2).forEach(function (arg) {
- let flag = arg.split('=')[0];
- switch (flag) {
- case 'debug':
- args.push('--nodeDebug');
- args.push('true');
- break;
- case '-d':
- case '--debug':
- case '--debug-brk':
- args.push('--v8Debug');
- args.push('true');
- break;
- default:
- args.push(arg);
- break;
- }
- });
- // TODO(cnishina): Make cli checks better.
- let allowedNames = [
- 'seleniumServerJar',
- 'seleniumServerStartTimeout',
- 'localSeleniumStandaloneOpts',
- 'chromeDriver',
- 'seleniumAddress',
- 'seleniumSessionId',
- 'webDriverProxy',
- 'useBlockingProxy',
- 'blockingProxyUrl',
- 'sauceUser',
- 'sauceKey',
- 'sauceAgent',
- 'sauceBuild',
- 'sauceSeleniumUseHttp',
- 'sauceSeleniumAddress',
- 'browserstackUser',
- 'browserstackKey',
- 'browserstackProxy',
- 'kobitonUser',
- 'kobitonKey',
- 'testobjectUser',
- 'testobjectKey',
- 'directConnect',
- 'firefoxPath',
- 'noGlobals',
- 'specs',
- 'exclude',
- 'suites',
- 'suite',
- 'capabilities',
- 'multiCapabilities',
- 'getMultiCapabilities',
- 'maxSessions',
- 'verbose',
- 'verboseMultiSessions',
- 'baseUrl',
- 'rootElement',
- 'allScriptsTimeout',
- 'getPageTimeout',
- 'beforeLaunch',
- 'onPrepare',
- 'onComplete',
- 'onCleanUp',
- 'afterLaunch',
- 'params',
- 'resultJsonOutputFile',
- 'restartBrowserBetweenTests',
- 'untrackOutstandingTimeouts',
- 'ignoreUncaughtExceptions',
- 'framework',
- 'jasmineNodeOpts',
- 'mochaOpts',
- 'plugins',
- 'skipSourceMapSupport',
- 'disableEnvironmentOverrides',
- 'ng12Hybrid',
- 'seleniumArgs',
- 'jvmArgs',
- 'configDir',
- 'troubleshoot',
- 'seleniumPort',
- 'mockSelenium',
- 'v8Debug',
- 'nodeDebug',
- 'debuggerServerPort',
- 'frameworkPath',
- 'elementExplorer',
- 'debug',
- 'logLevel',
- 'disableChecks',
- 'browser',
- 'name',
- 'platform',
- 'platform-version',
- 'tags',
- 'build',
- 'grep',
- 'invert-grep',
- 'explorer',
- 'stackTrace'
- ];
- let yargsOptions = {
- describes: {
- help: 'Print Protractor help menu',
- version: 'Print Protractor version',
- browser: 'Browsername, e.g. chrome or firefox',
- seleniumAddress: 'A running selenium address to use',
- seleniumSessionId: 'Attaching an existing session id',
- seleniumServerJar: 'Location of the standalone selenium jar file',
- seleniumPort: 'Optional port for the selenium standalone server',
- baseUrl: 'URL to prepend to all relative paths',
- rootElement: 'Element housing ng-app, if not html or body',
- specs: 'Comma-separated list of files to test',
- exclude: 'Comma-separated list of files to exclude',
- verbose: 'Print full spec names',
- stackTrace: 'Print stack trace on error',
- params: 'Param object to be passed to the tests',
- framework: 'Test framework to use: jasmine, mocha, or custom',
- resultJsonOutputFile: 'Path to save JSON test result',
- troubleshoot: 'Turn on troubleshooting output',
- elementExplorer: 'Interactively test Protractor commands',
- debuggerServerPort: 'Start a debugger server at specified port instead of repl',
- disableChecks: 'Disable cli checks',
- logLevel: 'Define Protractor log level [ERROR, WARN, INFO, DEBUG]'
- },
- aliases: {
- browser: 'capabilities.browserName',
- name: 'capabilities.name',
- platform: 'capabilities.platform',
- 'platform-version': 'capabilities.version',
- tags: 'capabilities.tags',
- build: 'capabilities.build',
- grep: 'jasmineNodeOpts.grep',
- 'invert-grep': 'jasmineNodeOpts.invertGrep',
- explorer: 'elementExplorer'
- },
- strings: { 'capabilities.tunnel-identifier': '' }
- };
- yargs.usage('Usage: protractor [configFile] [options]\n' +
- 'configFile defaults to protractor.conf.js\n' +
- 'The [options] object will override values from the config file.\n' +
- 'See the reference config for a full list of options.');
- for (let key of Object.keys(yargsOptions.describes)) {
- yargs.describe(key, yargsOptions.describes[key]);
- }
- for (let key of Object.keys(yargsOptions.aliases)) {
- yargs.alias(key, yargsOptions.aliases[key]);
- }
- for (let key of Object.keys(yargsOptions.strings)) {
- yargs.string(key);
- }
- yargs.check(function (arg) {
- if (arg._.length > 1) {
- throw new Error('Error: more than one config file specified');
- }
- return true;
- });
- let argv = yargs.parse(args);
- if (argv.help) {
- yargs.showHelp();
- process.exit(0);
- }
- if (argv.version) {
- console.log('Version ' + require(path.resolve(__dirname, '../package.json')).version);
- process.exit(0);
- }
- // Check to see if additional flags were used.
- argv.unknownFlags_ = Object.keys(argv).filter((element) => {
- return element !== '$0' && element !== '_' && allowedNames.indexOf(element) === -1;
- });
- /**
- * Helper to resolve comma separated lists of file pattern strings relative to
- * the cwd.
- *
- * @private
- * @param {Array} list
- */
- function processFilePatterns_(list) {
- return list.split(',').map(function (spec) {
- return path.resolve(process.cwd(), spec);
- });
- }
- ;
- if (argv.specs) {
- argv.specs = processFilePatterns_(argv.specs);
- }
- if (argv.exclude) {
- argv.exclude = processFilePatterns_(argv.exclude);
- }
- if (argv.capabilities && argv.capabilities.chromeOptions) {
- // ensure that single options (which optimist parses as a string)
- // are passed in an array in chromeOptions when required:
- // https://sites.google.com/a/chromium.org/chromedriver/capabilities#TOC-chromeOptions-object
- ['args', 'extensions', 'excludeSwitches', 'windowTypes'].forEach((key) => {
- if (typeof argv.capabilities.chromeOptions[key] === 'string') {
- argv.capabilities.chromeOptions[key] = [argv.capabilities.chromeOptions[key]];
- }
- });
- }
- // Use default configuration, if it exists.
- let configFile = argv._[0];
- if (!configFile) {
- if (fs.existsSync('./protractor.conf.js')) {
- configFile = './protractor.conf.js';
- }
- }
- if (!configFile && !argv.elementExplorer && args.length < 3) {
- console.log('**you must either specify a configuration file ' +
- 'or at least 3 options. See below for the options:\n');
- yargs.showHelp();
- process.exit(1);
- }
- // Run the launcher
- const launcher = require("./launcher");
- launcher.init(configFile, argv);
- //# sourceMappingURL=cli.js.map
|