webdriverio-community / wdio-html-reporter

Fork of wdio-html-format-reporter
MIT License
18 stars 27 forks source link

Master report is not generating for all suites with HTML REPORTER (WDIO6) #29

Closed gavrilenkokate closed 3 years ago

gavrilenkokate commented 4 years ago

`

Config of WebdriverIO `const {ReportAggregator, HtmlReporter} = require('@rpii/wdio-html-reporter'); //const log4j = require('log4js');

exports.config = { // // ==================== // Runner Configuration // ==================== // // WebdriverIO allows it to run your tests in arbitrary locations (e.g. locally or // on a remote machine). runner: 'local', // // ================== // Specify Test Files // ================== // Define which test specs should run. The pattern is relative to the directory // from which wdio was called. Notice that, if you are calling wdio from an // NPM script (see https://docs.npmjs.com/cli/run-script) then the current working // directory is where your package.json resides, so wdio will be called from there. // specs: [ './test/specs/*/.js' ], suites: {

    /**
     *
     * Suite of tests for FGB:
     *
     */

    fgb: ['./test/specs/fgb/**/*.js'],

    /**
     *
     * Suite of tests for CMS:
     *
     */

    cms: ['./test/specs/cms/**/*.js'],
},
// Patterns to exclude.
exclude: [

    './test/specs/fgb/HomePage/homePageCards.spec.js',
    './test/specs/fgb/Resources/Databases/Salaries/sortBySalary.spec.js',
    './test/specs/fgb/Resources/Databases/ParentalLeave/sortByParentalLeave.spec.js',
    './test/specs/fgb/UserProfile/userSettingsCheckBoxes.spec.js',
    './test/specs/fgb/Resources/Databases/WorkLifeBalance/sortByWorkLifeBalance.spec.js',
    './test/specs/cms/Community/SharedContent/cmsSearchModerationContent.spec.js'
],
//
// ============
// Capabilities
// ============
// Define your capabilities here. WebdriverIO can run multiple capabilities at the same
// time. Depending on the number of capabilities, WebdriverIO launches several test
// sessions. Within your capabilities you can overwrite the spec and exclude options in
// order to group specific specs to a specific capability.
//
// First, you can define how many instances should be started at the same time. Let's
// say you have 3 different capabilities (Chrome, Firefox, and Safari) and you have
// set maxInstances to 1; wdio will spawn 3 processes. Therefore, if you have 10 spec
// files and you set maxInstances to 10, all spec files will get tested at the same time
// and 30 processes will get spawned. The property handles how many capabilities
// from the same test should run tests.
//
maxInstances: 3,
//
// If you have trouble getting all important capabilities together, check out the
// Sauce Labs platform configurator - a great tool to configure your capabilities:
// https://docs.saucelabs.com/reference/platforms-configurator
//
capabilities: [{

    browserName: 'chrome',
    // 'goog:chromeOptions': {
    //     args: ['--headless', '--disable-gpu', '--window-size=1280x1024', '--disable-dev-shm-usage']
    // },
    // maxInstances can get overwritten per capability. So if you have an in-house Selenium
    // grid with only 5 firefox instances available you can make sure that not more than
    // 5 instances get started at a time.
    maxInstances: 3,
    //

    // If outputDir is provided WebdriverIO can capture driver session logs
    // it is possible to configure which logTypes to include/exclude.
    // excludeDriverLogs: ['*'], // pass '*' to exclude all driver session logs
    // excludeDriverLogs: ['bugreport', 'server'],
}],
//
// ===================
// Test Configurations
// ===================
// Define all options that are relevant for the WebdriverIO instance here
//
// Level of logging verbosity: trace | debug | info | warn | error | silent
logLevel: 'silent',
//
// Set specific log levels per logger
// loggers:
// - webdriver, webdriverio
// - @wdio/applitools-service, @wdio/browserstack-service, @wdio/devtools-service, @wdio/sauce-service
// - @wdio/mocha-framework, @wdio/jasmine-framework
// - @wdio/local-runner, @wdio/lambda-runner
// - @wdio/sumologic-reporter
// - @wdio/cli, @wdio/config, @wdio/sync, @wdio/utils
// Level of logging verbosity: trace | debug | info | warn | error | silent
// logLevels: {
//     webdriver: 'info',
//     '@wdio/applitools-service': 'info'
// },
//
// If you only want to run your tests until a specific amount of tests have failed use
// bail (default is 0 - don't bail, run all tests).
bail: 0,
//
// Set a base URL in order to shorten url command calls. If your `url` parameter starts
// with `/`, the base url gets prepended, not including the path portion of your baseUrl.
// If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url
// gets prepended directly.
//baseUrl: 'http://localhost:7000',
//
// Default timeout for all waitFor* commands.
waitforTimeout: 10000,
//
// Default timeout in milliseconds for request
// if browser driver or grid doesn't send response
connectionRetryTimeout: 90000,
//
// Default request retries count
connectionRetryCount: 3,
//
// Test runner services
// Services take over a specific job you don't want to take care of. They enhance
// your test setup with almost no effort. Unlike plugins, they don't add new
// commands. Instead, they hook themselves up into the test process.
services: [
    ['selenium-standalone', {

        logPath: './build/selenium-logs',
        installArgs: {
            drivers: {
                chrome: {version: '80.0.3987.106'},

                //firefox: {version: '0.26.0'}
            }
        },
        args: {
            drivers: {
                chrome: {version: '80.0.3987.106'},
                //firefox: {version: '0.26.0'}
            }
        },
    }]
],
// Framework you want to run your specs with.
// The following are supported: Mocha, Jasmine, and Cucumber
// see also: https://webdriver.io/docs/frameworks.html
//
// Make sure you have the wdio adapter package for the specific framework installed
// before running any tests.
framework: 'mocha',
//
// The number of times to retry the entire specfile when it fails as a whole
// specFileRetries: 1,
//
// Whether or not retried specfiles should be retried immediately or deferred to the end of the queue
// specFileRetriesDeferred: false,
//
// Test reporter for stdout.
// The only one supported by default is 'dot'
// see also: https://webdriver.io/docs/dot-reporter.html
// reporters: ['spec',
//     //     ['allure', {
//     //     outputDir: './build/allureResults',
//     //     disableWebdriverStepsReporting: false,
//     //     disableWebdriverScreenshotsReporting: false,
//     // }]
// ],
reporters: ['spec', [HtmlReporter, {
    debug: true,
    outputDir: './reports/html-reports/',
    filename: 'report.html',
    reportTitle: 'Test Report Title',
    showInBrowser: true,
}
]],

//
// Options to be passed to Mocha.
// See the full list at http://mochajs.org/
mochaOpts: {
    ui: 'bdd',
    timeout: 60000
},
//
// =====
// Hooks
// =====
// WebdriverIO provides several hooks you can use to interfere with the test process in order to enhance
// it and to build services around it. You can either apply a single function or an array of
// methods to it. If one of them returns with a promise, WebdriverIO will wait until that promise got
// resolved to continue.
/**
 * 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) {
    let reportAggregator = new ReportAggregator({
        outputDir: './reports/html-reports/',
        filename: 'master-report.html',
        reportTitle: 'Master Report',
        browserName: browser.capabilities.browserName,
        // to use the template override option, can point to your own file in the test project:
        // templateFilename: path.resolve(__dirname, '../template/wdio-html-reporter-alt-template.hbs')
    });
    reportAggregator.clean();

    global.reportAggregator = reportAggregator;
},
/**
 * 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 initialised
 * @param  {[type]} execArgv list of string arguments passed to the worker process
 */
// onWorkerStart: function (cid, caps, specs, args, execArgv) {
// },
/**
 * 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
 */
// beforeSession: function (config, capabilities, specs) {
// },
/**
 * 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
 */
// 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) {
// },
/**
 * Hook that gets executed before the suite starts
 * @param {Object} suite suite details
 */
// beforeSuite: function (suite) {
// },
/**
 * Function to be executed before a test (in Mocha/Jasmine) starts.
 */
// beforeTest: function (test, context) {
// },
/**
 * Hook that gets executed _before_ a hook within the suite starts (e.g. runs before calling
 * beforeEach in Mocha)
 */
// beforeHook: function (test, context) {
// },
/**
 * Hook that gets executed _after_ a hook within the suite starts (e.g. runs after calling
 * afterEach in Mocha)
 */
// afterHook: function (test, context, { error, result, duration, passed, retries }) {
// },
/**
 * Function to be executed after a test (in Mocha/Jasmine).
 */
afterTest: function (test, context, {error, result, duration, passed, retries}) {
    const path = require('path');
    const moment = require('moment');

    // if test passed, ignore, else take and save screenshot.
    if (test.passed) {
        return;
    }
    const timestamp = moment().format('YYYYMMDD-HHmmss.SSS');
    const filepath = path.join('reports/html-reports/screenshots/', timestamp + '.png');
    browser.saveScreenshot(filepath);
    process.emit('test:screenshot', filepath);
},

/**
 * Hook that gets executed after the suite has ended
 * @param {Object} suite suite details
 */
// afterSuite: function (suite) {
// },
/**
 * 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: async function (exitCode, config, capabilities, results) {
    await global.reportAggregator.createReport({
        config: config,
        capabilities: capabilities,
        results: 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) {
//}

} ` Describe the bug Master report is not generating for all suites with HTML REPORTER (WDIO6). I'm getting a bunch of HTML reports for each spec file. found this issues reported on stackoverflow.com: https://stackoverflow.com/questions/57622119/master-report-is-not-generating-for-all-suites-with-html-reporter-wdio5

Please use the correct markdown

RahulChIO commented 3 years ago

getting the following exception while running with wdio v6.

(node:79481) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'createReport' of undefined
    at /Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/wdio.conf.js:292:37
    at Object.onComplete (/Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/wdio.conf.js:293:7)
    at Promise.all.onCompleteHook.map (/Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/node_modules/@wdio/cli/build/utils.js:109:13)
    at Array.map (<anonymous>)
    at runOnCompleteHook (/Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/node_modules/@wdio/cli/build/utils.js:107:37)
    at Launcher.run (/Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/node_modules/@wdio/cli/build/launcher.js:83:69)
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:79481) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:79481) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
rpii commented 3 years ago

make sure the suggested in on prepare is executing:

onPrepare: function (config, capabilities) {

let reportAggregator = new ReportAggregator({
    outputDir: './reports/html-reports/',
    filename: 'master-report.html',
    reportTitle: 'Master Report',
    LOG: logger,
    showInBrowser: true
});
reportAggregator.clean() ;

global.reportAggregator = reportAggregator;

},

On Thu, Sep 24, 2020 at 6:58 AM Rahul Chavan notifications@github.com wrote:

getting the following exception while running with wdio v6.

(node:79481) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'createReport' of undefined at /Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/wdio.conf.js:292:37 at Object.onComplete (/Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/wdio.conf.js:293:7) at Promise.all.onCompleteHook.map (/Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/node_modules/@wdio/cli/build/utils.js:109:13) at Array.map () at runOnCompleteHook (/Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/node_modules/@wdio/cli/build/utils.js:107:37) at Launcher.run (/Users/Rahul/Documents/GitHub/CloudIO-Automation-Suite/SetupPages/node_modules/@wdio/cli/build/launcher.js:83:69) at process._tickCallback (internal/process/next_tick.js:68:7) (node:79481) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1) (node:79481) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/rpii/wdio-html-reporter/issues/29#issuecomment-698362021, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEABIEPZ6D7E6N7V3GYDBEDSHNF6ZANCNFSM4MNMSKYQ .

rpii commented 3 years ago

No response, closing