0

在尝试在保护器中执行 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);
        });
    }    
}
4

1 回答 1

4

onPrepare 和 onComplete 被称为生命周期钩子,在执行的特定阶段执行。正如您所提到的,量角器可以通过各种方式使用许多生命周期钩子,包括您声明的 jasmine 报告器。

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

--- 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 中声明了它。Jasmine 报告器本身有一些重要的生命周期钩子:(jasmineStarted、jasmineDone、suiteStarted、suiteDone、specStarted、specDone)但是,如果您查看我粘贴的上述概述,您可以看到这些报告器生命周期钩子都发生onComplete之前叫。如果您在 onComplete 而不是 onPrepare 中声明您的报告器,这些生命周期阶段将已经过去,并且不会对它们采取任何操作。

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

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

希望能回答你的问题,但如果我误解了,请告诉我。

于 2019-01-20T16:41:15.133 回答