UNPKG

tlc-core-automation-framework-v3-wdio-v9

Version:

Background: - We are following multi-layer automation framework architecture using webdriver.io + cucumber + typescript This core framework has been implemented with generic utility functions and cucumber steps, which can be easily consumed by another fra

286 lines 17 kB
"use strict"; // import type {Options} from "@wdio/types"; // import dotenv from "dotenv"; // import {browserHelper} from "./src/e2e/helpers/common-helpers/browser-helper"; // import logger from "./src/e2e/helpers/reporting-helpers/logger"; // // const chromeOptions = []; // // if (process.env.GITLAB) { // chromeOptions.push('--headless'); // chromeOptions.push('--disable-dev-shm-usage'); // } // // // see https://webdriver.io/docs/selenium-standalone-service/ // const drivers = { // // see https://chromedriver.storage.googleapis.com/ for versions // chrome: {version: '106.0.5249.61'} // // chrome: {version: '103.0.5060.134'} // // chrome: {version: '105.0.5195.19'} // } // // const setupDeviceEmulation = () => { // const tags = process.env.PLATFORM_TAG || "@desktop"; // const isMobile = tags.includes('@mobile'); // const isTablet = tags.includes('@tablet'); // const isDesktop = tags.includes('@desktop'); // logger.info(`Running tests on : ${tags.split('@')[1]}`) // if (isMobile) { // return {'deviceName': 'iPhone XR'} // } else if (isTablet) { // return {'deviceName': 'iPad Air'} // } else if (isDesktop) { // return undefined; // } // }; // // export const config: Options.Testrunner = { // autoCompileOpts: { // autoCompile: true, // // see https://github.com/TypeStrong/ts-node#cli-and-programmatic-options // // for all available options // tsNodeOpts: { // transpileOnly: true, // project: 'tsconfig.json' // } // }, // specs: [ // './src/features/**/*.feature' // ], // // Patterns to exclude. // exclude: [ // // 'path/to/excluded/files' // ], // maxInstances: 10, // capabilities: [{ // maxInstances: 3, // // // browserName: 'chrome', // acceptInsecureCerts: true, // acceptSslCerts: true, // 'goog:chromeOptions': { // args: [ // '--no-sandbox', // '--disable-dev-shm-usage', // '--window-size=1920,1080', // '--ignore-certificate-errors' // ].concat(chromeOptions), // mobileEmulation: setupDeviceEmulation(), // prefs: { // 'profile.default_content_setting_values.geolocation': false, // 'profile.password_manager_enabled': false, // 'credentials_enable_service': false, // 'password_manager_enabled': false // } // } // }], // // logLevel: 'silent', // bail: 0, // baseUrl: 'https://the-internet.herokuapp.com', // pageId: "", // waitforTimeout: 60000, // connectionRetryTimeout: 120000, // connectionRetryCount: 3, // services: [ // ['selenium-standalone', { // logPath: 'logs', // installArgs: {drivers}, // args: {drivers} // }], 'devtools' // ], // // framework: 'cucumber', // reporters: ['spec'], // // cucumberOpts: { // // <string[]> (file/dir) require files before executing features // require: ['./src/e2e/step-definitions/**/*.ts'], // // <boolean> show full backtrace for errors // backtrace: false, // // <string[]> ("extension:module") require files with the given EXTENSION after requiring MODULE (repeatable) // requireModule: [], // // <boolean> invoke formatters without executing steps // dryRun: false, // // <boolean> abort the run on first failure // failFast: false, // // <boolean> hide step definition snippets for pending steps // snippets: true, // // <boolean> hide source uris // source: true, // // <boolean> fail if there are any undefined or pending steps // strict: false, // // <string> (expression) only execute the features or scenarios with tags matching the expression // tagExpression: '', // // <number> timeout for step definitions // timeout: 60000, // // <boolean> Enable this config to treat undefined definitions as warnings. // ignoreUndefinedDefinitions: false // }, // // /** // * Gets executed once before all workers get launched. // * @param {Object} config wdio configuration object // * @param {Array.<Object>} capabilities list of capabilities details // */ // // onPrepare: function (config, capabilities) { // // }, // /** // * Gets executed before a worker process is spawned and can be used to initialise specific service // * for that worker as well as modify runtime environments in an async fashion. // * @param {String} cid capability id (e.g 0-0) // * @param {[type]} caps object containing capabilities for session that will be spawn in the worker // * @param {[type]} specs specs to be run in the worker process // * @param {[type]} args object that will be merged with the main configuration once worker is initialized // * @param {[type]} execArgv list of string arguments passed to the worker process // */ // // onWorkerStart: function (cid, caps, specs, args, execArgv) { // // }, // /** // * Gets executed just after a worker process has exited. // * @param {String} cid capability id (e.g 0-0) // * @param {Number} exitCode 0 - success, 1 - fail // * @param {[type]} specs specs to be run in the worker process // * @param {Number} retries number of retries used // */ // // onWorkerEnd: function (cid, exitCode, specs, retries) { // // }, // /** // * Gets executed just before initialising the webdriver session and test framework. It allows you // * to manipulate configurations depending on the capability or spec. // * @param {Object} config wdio configuration object // * @param {Array.<Object>} capabilities list of capabilities details // * @param {Array.<String>} specs List of spec file paths that are to be run // * @param {String} cid worker id (e.g. 0-0) // */ // beforeSession: function (config, capabilities, specs, cid) { // // console.log(`Initializing before Session`); // // dotenv.config({path: `env/common.env`}) // // console.log(`Env file loaded successfully`); // // console.log(`Before session ended`); // }, // /** // * Gets executed before test execution begins. At this point you can access to all global // * variables like `browser`. It is the perfect place to define custom commands. // * @param {Array.<Object>} capabilities list of capabilities details // * @param {Array.<String>} specs List of spec file paths that are to be run // * @param {Object} browser instance of created browser/device session // */ // // before: function (capabilities, specs) { // // }, // /** // * Runs before a WebdriverIO command gets executed. // * @param {String} commandName hook command name // * @param {Array} args arguments that command would receive // */ // // beforeCommand: function (commandName, args) { // // }, // /** // * Cucumber Hooks // * // * Runs before a Cucumber Feature. // * @param {String} uri path to feature file // * @param {GherkinDocument.IFeature} feature Cucumber feature object // */ // // beforeFeature: function (uri, feature) { // // }, // /** // * // * Runs before a Cucumber Scenario. // * @param {ITestCaseHookParameter} world world object containing information on pickle and test step // * @param {Object} context Cucumber World object // */ // beforeScenario: function (world, context) { // dotenv.config({path: `env/common.env`}) // logger.info(`Env file loaded successfully`); // browserHelper.clearBrowserStorage(); // }, // /** // * // * Runs before a Cucumber Step. // * @param {Pickle.IPickleStep} step step data // * @param {IPickle} scenario scenario pickle // * @param {Object} context Cucumber World object // */ // // beforeStep: function (step, scenario, context) { // // }, // /** // * // * Runs after a Cucumber Step. // * @param {Pickle.IPickleStep} step step data // * @param {IPickle} scenario scenario pickle // * @param {Object} result results object containing scenario results // * @param {boolean} result.passed true if scenario has passed // * @param {string} result.error error stack if scenario failed // * @param {number} result.duration duration of scenario in milliseconds // * @param {Object} context Cucumber World object // */ // // afterStep: function (step, scenario, result, context) { // // }, // /** // * // * Runs after a Cucumber Scenario. // * @param {ITestCaseHookParameter} world world object containing information on pickle and test step // * @param {Object} result results object containing scenario results // * @param {boolean} result.passed true if scenario has passed // * @param {string} result.error error stack if scenario failed // * @param {number} result.duration duration of scenario in milliseconds // * @param {Object} context Cucumber World object // */ // // afterScenario: function (world, result, context) { // // }, // /** // * // * Runs after a Cucumber Feature. // * @param {String} uri path to feature file // * @param {GherkinDocument.IFeature} feature Cucumber feature object // */ // // afterFeature: function (uri, feature) { // // }, // // /** // * Runs after a WebdriverIO command gets executed // * @param {String} commandName hook command name // * @param {Array} args arguments that command would receive // * @param {Number} result 0 - command success, 1 - command error // * @param {Object} error error object if any // */ // // afterCommand: function (commandName, args, result, error) { // // }, // /** // * Gets executed after all tests are done. You still have access to all global variables from // * the test. // * @param {Number} result 0 - test pass, 1 - test fail // * @param {Array.<Object>} capabilities list of capabilities details // * @param {Array.<String>} specs List of spec file paths that ran // */ // // after: function (result, capabilities, specs) { // // }, // /** // * Gets executed right after terminating the webdriver session. // * @param {Object} config wdio configuration object // * @param {Array.<Object>} capabilities list of capabilities details // * @param {Array.<String>} specs List of spec file paths that ran // */ // // afterSession: function (config, capabilities, specs) { // // }, // /** // * Gets executed after all workers got shut down and the process is about to exit. An error // * thrown in the onComplete hook will result in the test run failing. // * @param {Object} exitCode 0 - success, 1 - fail // * @param {Object} config wdio configuration object // * @param {Array.<Object>} capabilities list of capabilities details // * @param {<Object>} results object containing test results // */ // // onComplete: function(exitCode, config, capabilities, results) { // // }, // /** // * Gets executed when a refresh happens. // * @param {String} oldSessionId session ID of the old session // * @param {String} newSessionId session ID of the new session // */ // // onReload: function(oldSessionId, newSessionId) { // // } // } // //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Rpby5jb25mLXY3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vd2Rpby5jb25mLXY3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsK0JBQStCO0FBQy9CLGlGQUFpRjtBQUNqRixtRUFBbUU7QUFDbkUsRUFBRTtBQUNGLDRCQUE0QjtBQUM1QixFQUFFO0FBQ0YsNEJBQTRCO0FBQzVCLHdDQUF3QztBQUN4QyxxREFBcUQ7QUFDckQsSUFBSTtBQUNKLEVBQUU7QUFDRixnRUFBZ0U7QUFDaEUsb0JBQW9CO0FBQ3BCLHVFQUF1RTtBQUN2RSx5Q0FBeUM7QUFDekMsNkNBQTZDO0FBQzdDLDRDQUE0QztBQUM1QyxJQUFJO0FBQ0osRUFBRTtBQUNGLHVDQUF1QztBQUN2QywyREFBMkQ7QUFDM0QsaURBQWlEO0FBQ2pELGlEQUFpRDtBQUNqRCxtREFBbUQ7QUFDbkQsOERBQThEO0FBQzlELHNCQUFzQjtBQUN0Qiw2Q0FBNkM7QUFDN0MsNkJBQTZCO0FBQzdCLDRDQUE0QztBQUM1Qyw4QkFBOEI7QUFDOUIsNEJBQTRCO0FBQzVCLFFBQVE7QUFDUixLQUFLO0FBQ0wsRUFBRTtBQUNGLDhDQUE4QztBQUM5Qyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG9GQUFvRjtBQUNwRix1Q0FBdUM7QUFDdkMsd0JBQXdCO0FBQ3hCLG1DQUFtQztBQUNuQyx1Q0FBdUM7QUFDdkMsWUFBWTtBQUNaLFNBQVM7QUFDVCxlQUFlO0FBQ2Ysd0NBQXdDO0FBQ3hDLFNBQVM7QUFDVCw4QkFBOEI7QUFDOUIsaUJBQWlCO0FBQ2pCLHNDQUFzQztBQUN0QyxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCLHVCQUF1QjtBQUN2QiwyQkFBMkI7QUFDM0IsYUFBYTtBQUNiLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFDckMsZ0NBQWdDO0FBQ2hDLGtDQUFrQztBQUNsQyxzQkFBc0I7QUFDdEIsa0NBQWtDO0FBQ2xDLDZDQUE2QztBQUM3Qyw2Q0FBNkM7QUFD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