【问题标题】:Need help making onPrepare use global variables in Protractor需要帮助使 onPrepare 在 Protractor 中使用全局变量
【发布时间】:2015-12-16 14:34:48
【问题描述】:

除了将初始 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.");

},

【问题讨论】:

    标签: angularjs automated-tests protractor configuration-files jasmine2.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'
            }));
        });
    },
    

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

    【讨论】:

    • 感谢您的回复。将记者初始化移动到getCapabilities 的结果是成功地将 xml 文件归档到适当的目录中,但它增加了将我所有测试规范的标题更改为“重点规范”的不幸效果,所以我不能告诉哪个测试不再是哪个,并从结果中完全删除我的一些测试步骤。 :(
    • 还有@alecxe 在全局可用的browser 对象上设置属性是什么意思?只需将global. 更改为browser. 或者还有更多功能吗?我边走边学。
    • @Defpotec2020 是的,将global. 更改为browser.,每次访问变量时,使用browser.variable
    • 谢谢@alecxe。我会将您的答案标记为已接受,因为它大部分都在工作,但我还没有完全到那里。当我按照您的建议对事物进行分组时,我的测试仍然只是在顶部说“重点规范”,而不是我的测试标题,如果我没有分组的话,它会给我。
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 2020-05-19
    • 2015-06-26
    • 2023-03-19
    • 1970-01-01
    • 2020-07-23
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多