11

我的protractor配置文件中的这段代码运行良好……除了htmlonComplete 中的文件创建始终使用上一次xml测试运行中的 junitresults文件,而不是在同一配置文件的 onPrepare 函数中创建的 xml 文件。因此,html 页面总是显示比 html 页面上显示的时间戳慢一档的测试结果。

一个简单的例子是,如果我从 test-results 文件夹中的先前测试中没有 xml 文件开始,则 html 生成器根本找不到xml 文件来构建 html 文件,因此不会生成 html 文件。但是的xml 文件确实显示仍然被创建,放入文件夹中,并且完全被忽略......直到下一次测试运行。

你能帮我让我的测试生成一个 xml 文件,然后使用xml 文件生成 html 文件吗?

谢谢!

onPrepare: function() {
    var capsPromise = browser.getCapabilities();   
    capsPromise.then(function(caps) {
        browser.browserName = caps.caps_.browserName.replace(/ /g,"-");
        browser.browserVersion = caps.caps_.version; 
        browserName = browser.browserName;
        browser.reportPath = 'c:/QA/test-results/' + browser.browserName + '/';
    }). then(function(caps) {
            var jasmineReporters = require('jasmine-reporters');
            jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({    
                consolidateAll: true,
                savePath: 'c:/QA/test-results/' + browser.browserName + '/',
                filePrefix: 'junitresults'
        }));
    });
    return browser.browserName, browser.browserVersion, browser.reportPath;
},

onComplete: function() {
  var HTMLReport = require('jasmine-xml2html-converter');
  // Call custom report for html output
  testConfig = {
    reportTitle: 'Test Execution Report',
    outputPath: browser.reportPath,
    seleniumServer: 'default',
    applicationUrl: browser.baseUrl,
    testBrowser: browser.browserName + ' v.' + browser.browserVersion
  };
  new HTMLReport().from(browser.reportPath + 'junitresults.xml', testConfig);
  console.log("... aaaannnnd... done.");
},
4

1 回答 1

5

这都是关于时机的。JUnitXmlReporterfromjasmine-reporters将输出写入jasmineDone回调 ( source ) 上的 XML 文件,这发生在onComplete.

首先要尝试的事情应该是切换到afterLaunchonCleanup代替onComplete. 请注意,browser对象在这些方法中不可用,您需要其他方式在回调之间共享变量。另见:


您还可以添加自定义报告器,提供jasmineDone回调:

jasmine.getEnv().addReporter({
    jasmineDone: function () {
          var HTMLReport = require('jasmine-xml2html-converter');
          // Call custom report for html output
          testConfig = {
            reportTitle: 'Test Execution Report',
            outputPath: browser.reportPath,
            seleniumServer: 'default',
            applicationUrl: browser.baseUrl,
            testBrowser: browser.browserName + ' v.' + browser.browserVersion
          };
          new HTMLReport().from(browser.reportPath + 'junitresults.xml', testConfig);
          console.log("... aaaannnnd... done.");
    }
});

另一种选择是直接通过,例如,生成 HTML 报告protractor-jasmine2-html-reporter

于 2016-01-28T22:54:37.403 回答