需要帮助制作onPrepare在Protractor中使用全局变量

时间:2015-12-16 14:34:48

标签: angularjs automated-tests protractor configuration-files jasmine2.0

除了将初始junitresults.xml转储到基本文件夹并忽略代码以将其放入reportPath文件夹之外,其余部分都在工作。

onComplete函数在访问要在其node_module中使用的全局变量时没有任何问题。 (我必须人工地在reportPath文件夹中安装一个测试junitresults.xml文件,以便它可以使用,因为onPrepare并没有把它放在那里)。

似乎onPrepare中的函数完全忽略了在同一onPrepare中设置的全局变量。我怎样才能访问它们?我甚至试图为它进行单独的非全局变量访问,它也忽略了这一点。请帮忙!谢谢!

...

    multiCapabilities: [
    { browserName: 'firefox' },
    { browserName: 'chrome' }
    ],

onPrepare: function() {

    var capsPromise = browser.getCapabilities();   
    capsPromise.then(function(caps) {
        global.browserName = caps.caps_.browserName.replace(/ /g,"-");
        global.browserVersion = caps.caps_.version; 
        // browserName = global.browserName; // was just testing if not-global would work
        global.reportPath = 'c:/QA/test-results/' + global.browserName + '/';
    });

    var jasmineReporters = require('jasmine-reporters');
    jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
        consolidateAll: true,
        savePath: global.reportPath,
        filePrefix: 'junitresults'
    }));

    return global.browserName, global.browserVersion, global.reportPath;

},


onComplete: function() {

  var HTMLReport = require('jasmine-xml2html-converter');

  // Call custom report for html output
  testConfig = {
    reportTitle: 'Test Execution Report',
    outputPath: reportPath,
    seleniumServer: 'default',
    applicationUrl: browser.baseUrl,
    testBrowser: global.browserName + ' v.' + global.browserVersion
  };
  new HTMLReport().from(reportPath + 'junitresults.xml', testConfig);

  console.log("... aaaannnnd... done.");

},

1 个答案:

答案 0 :(得分:1)

尝试将jasmine报告初始化放入getCapabilities承诺解析回调:

onPrepare: function() {
    var capsPromise = browser.getCapabilities();   
    capsPromise.then(function(caps) {
        var browserName = caps.caps_.browserName.replace(/ /g,"-");
        var browserVersion = caps.caps_.version; 
        var reportPath = 'c:/QA/test-results/' + browserName + '/';

        var jasmineReporters = require('jasmine-reporters');
        jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
            consolidateAll: true,
            savePath: reportPath,
            filePrefix: 'junitresults'
        }));
    });
},

此外,您可以在全局可用的global对象上设置属性,而不是browser