保护剂或茉莉中的onprepare和onComplete是什么?

时间:2019-01-19 15:29:45

标签: jasmine jasmine-reporters protector

当尝试在保护器中的所有工作文件中执行conf.js文件时,同时生成从xml到html屏幕截图的报告(未附加到html报告)。 还有为什么默认情况下onprepare和onComplete被执行。想知道这些的实现。

任何澄清都将对相关的github源代码有所帮助。

exports.config = {
    framework: 'jasmine2',
    seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: ['spec.js'],
    capabilities: {
        browserName: 'chrome'
    },
    onPrepare: function () {
        console.log('on prepared called');
        var jasmineReporters = require('jasmine-reporters');
        jasmine.getEnv().addReporter(new . jasmineReporters.JUnitXmlReporter({
            consolidateAll: true,
            //savePath: '.',
            filePrefix: 'xmlresults.xml'
        }));
    },

    onComplete: function() {
        console.log('on complete called');
        var browserName, browserVersion;
        var capsPromise = browser.getCapabilities();

        capsPromise.then(function (caps) {
            browserName = caps.get('browserName');
            browserVersion = caps.get('version');
            platform = caps.get('platform');

            var HTMLReport = require('protractor-html-reporter-2');

            testConfig = {
                reportTitle: 'Protractor Test Execution Report',
                outputPath: './',
                outputFilename: 'ProtractorTestReport',
                screenshotPath: './screenshots',
                testBrowser: browserName,
                browserVersion: browserVersion,
                modifiedSuiteName: false,
                screenshotsOnlyOnFailure: true,
                testPlatform: platform
            };
            new HTMLReport().from('xmlresults.xml', testConfig);
        });
    }    
}

1 个答案:

答案 0 :(得分:0)

onPrepare和onComplete被称为生命周期挂钩,并在执行的特定阶段执行。如您所提到的,量角器可以通过多种方式使用许多生命周期挂钩,包括您声明的茉莉花记者所提供的。

生命周期挂钩概述及其触发顺序

--- beforeLaunch           
    --- onPrepare          (set in conf) ***reporters initialized here
      --- jasmineStarted   (set in reporter)
        --- beforeAll
         --- suiteStarted  (set in reporter)
          --- specStarted  (set in reporter)
           --- beforeEach  (set in testFile)
           +++ afterEach   (set in testFile)
          +++ specDone     (set in reporter)
         +++ suiteDone     (set in reporter)
        +++ afterAll
      +++ jasmineDone      (set in reporter)
    +++ onComplete         (set in conf)
+++ afterLaunch

目前尚不清楚您的问题来自什么问题,但我假设您的html记者遇到了问题,因为您是在onComplete中声明的。 茉莉花记者自己也有一些重要的生命周期挂钩: ( jasmineStarted,jasmineDone,suiteStarted,suiteDone,specStarted,specDone )  但是,如果您看一下我粘贴的以上概述,您会发现这些报告程序生命周期挂钩全部发生在 调用onComplete之前。如果您在onComplete而不是onPrepare中声明您的报告程序,则这些生命周期阶段将已经过去,并且将不对其执行任何操作。

您可以在附加的链接中了解有关量角器生命周期挂钩的用途的更多信息。 https://github.com/angular/protractor/blob/master/exampleTypescript/conf.ts

和Jasmine Reporter生命周期挂钩。 https://jasmine.github.io/api/3.3/Reporter.html

希望能回答您的问题,但是如果我有误解,请告诉我。