1

Каждая часть этой работы работает, за исключением того, что она просто сбрасывает исходный junitresults.xml в базовую папку и игнорирует код, чтобы поместить его в папку reportPath.Нужна помощь в onPrepare использовать глобальные переменные в Protractor

Функция onComplete не имеет проблем с доступом к глобальным переменным для использования в своем node_module. (Я должен искусственно иметь тестовый файл junitresults.xml, установленный в папке reportPath, для которого он работает, хотя, поскольку 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

Попробуйте поставить жасмин инициализацию репортер в 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 объекта.

+0

Спасибо за ответ. Перемещение инициализации репортера в 'getCapabilities' было результатом успешной подачи файлов xml в соответствующие каталоги, но у него был дополнительный неудачный эффект от изменения названия всех моих тестовых спецификаций на« сфокусированную спецификацию », поэтому я не могу скажите, какой тест уже есть, а также полностью исключить некоторые из моих тестовых шагов. :( – Defpotec2020

+0

Также @alecxe означает, что настройка свойств на глобально доступном объекте 'browser' означает« просто изменение «global.' на« browser.' »или есть ли что-то еще, чем это? Я учусь, когда я иду. – Defpotec2020

+1

@ Defpotec2020 yup, измените 'global.' на' browser.' и каждый раз, когда вы обращаетесь к переменной, используйте 'browser.variable'. – alecxe

Смежные вопросы