Onprepare с jasmine-reporter вызывает сбои при выполнении с IE - PullRequest
0 голосов
/ 14 января 2019

Спустя некоторое время, пытаясь выяснить, почему начало моих тестов не удается (только для IE, с chrome работает просто отлично), я обнаружил, что это вызвано функцией on-prepare, когда речь заходит об этой части кода. :

  jasmine.getEnv().addReporter({
    specDone: function (result) {
      browser.getCapabilities().then(function (caps) 
      {
        var browserName = caps.get('browserName');
        browser.takeScreenshot().then(function (png) {
          var stream = fs.createWriteStream('./execution_results/reports/results/screenshots/' + browserName + '-' + result.fullName+ '.png');
          stream.write(new Buffer.from(png, 'base64'));
          stream.end();
        });
      });
    }
  });

Если я прокомментирую эту часть, тесты пройдут гладко. Моя страница входа не является угловой, поэтому я отключаю синхронизацию для входа и снова включаю, не уверенный, может ли это быть связано.

Как я могу заставить транспортир ждать окончания этой части, прежде чем продолжить выполнение?

Я уже пытался добавить этот код в обещание (в файле conf), чтобы заставить транспортира ждать, но даже с этим я получаю время ожидания jasmine 'TimeoutError: Ожидание истекло после 20000 мс', поэтому я считаю, что сделал это неправильно.

Я получаю ошибку:

Failed: Unable to determine type from: E. Last 1 characters read: E
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'xxxxx', ip: 'xx.xx.xx.xx', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '10.0.2'
Driver info: driver.version: unknown

Полный файл настроек:

var jasmineReporters = require('./lib/node_modules/jasmine-reporters');
var HTMLReport = require('./lib/node_modules/protractor-html-reporter-2');
var mkdirp = require('./lib/node_modules/mkdirp');
var fs = require('./lib/node_modules/fs-extra');
let date = require('./lib/node_modules/date-and-time');  

var environmentToExecute = 'https://myportal' 

exports.config = {

seleniumAddress: 'http://'+process.env.AUTOTEST_ADDRESS+'/wd/hub',

framework: 'jasmine2',

specs: ['all my specs'],

suites: {
  //All my suites
},

allScriptsTimeout: 20000,

onPrepare: function () {   
  {
   //Here I create the folders (removed to make it shorter)
  }

  jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
    consolidateAll: true,
    savePath: './execution_results/reports/xml/',
    filePrefix: 'xmlresults'
  }));

  jasmine.getEnv().addReporter({
    specDone: function (result) {
      browser.getCapabilities().then(function (caps) 
      {
        var browserName = caps.get('browserName');
        browser.takeScreenshot().then(function (png) {
          var stream = fs.createWriteStream('./execution_results/reports/results/screenshots/' + browserName + '-' + result.fullName+ '.png');
          stream.write(new Buffer.from(png, 'base64'));
          stream.end();
        });
      });
    }
  });
},

//HTMLReport called once tests are finished
onComplete: function() 
{
  //I removed this to make it shorter, but basically it is the function
  // that comverts the xml in html and build the report
},

jasmineNodeOpts: {
  showColors: true, // Use colors in the command line report.
  // If true, display spec names.
  isVerbose: true,
  defaultTimeoutInterval: 100000
},

params: {
    //Other files like functions and so on...
  },
  login:{
    //parameters to login
  }
},

multiCapabilities:
[
 {
   'browserName': 'internet explorer',
   'version': 11,
 },
 /*   
 //chrome, firefox...
 */
],

};//end of Conf.js

Спасибо!

1 Ответ

0 голосов
/ 14 января 2019

Недавно у меня также были проблемы с асинхронными действиями в репортере Jasmine, и, к сожалению, я не мог понять, как заставить их должным образом ожидать результатов обещания, прежде чем двигаться дальше. Если у кого-то есть информация по этому поводу, я был бы очень признателен.

Я реализовал обходные пути с использованием глобальных переменных и ловушки AfterAll, которая способна правильно ожидать обещания, которые могут работать для вас. Я предполагаю, что вам нужно только свойство 'fullname' вашего результата, чтобы вы могли попробовать это.

Объявите глобальные свойства в вашем onPrepare, и вы можете назначить значения этой глобальной переменной в своем репортере. Присвойте ему полное имя спецификации в specStarted вместо specDone . Затем вы можете создать свой скриншот внутри ваших тестов afterAll, которые правильно ожидают результатов обещаний.

onPrepare: function () {   
   global.currentlyExecutingSpec = 'tbd';

  jasmine.getEnv().addReporter({
    specStarted: function (result) {
      currentlyExecutingSpec = result.fullName
    }
  })
  jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
    consolidateAll: true,
    savePath: './execution_results/reports/xml/',
    filePrefix: 'xmlresults'
  }));
}

Внутри ваших тестовых файлов

afterEach(function(){
  browser.getCapabilities().then(function (caps) 
  {
      var browserName = caps.get('browserName');
      browser.takeScreenshot().then(function (png) {
        var stream = 
        fs.createWriteStream('./execution_results/reports/results/screenshots/' + browserName + '-' + currentlyExecutingSpec + '.png');
        stream.write(new Buffer.from(png, 'base64'));
        stream.end();
      });
  };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...