Доступ к среде Intern в тесте, чтобы получить имя браузера

Я хочу делать скриншоты каждого сценария в своих тестах и ​​в каждом браузере.

В настоящее время у меня есть неудачные тесты в Firefox, но не в Chrome, поэтому мне нужен хороший способ быстро увидеть ошибку, поэтому я пытаюсь добавить префикс имени браузера к имени файла снимка экрана.

Я могу получить доступ к объекту возможностей через this.remote.session.capabilities и получить от него свойство browserName. Я использую это так:

    bdd.before(function(){
        this.remote.setFindTimeout(5000);
        browser = this.remote.session.capabilities.browserName;
    });

в сочетании с

function saveScreenshot(name, screenshot) {
    var dir = './screenshots';
    if (!fs.existsSync(dir)){
        fs.mkdirSync(dir);
    }
    fs.writeFileSync(dir + '/' + browser + '_' + name, screenshot)
};

Однако при работе в Chrome и Firefox я получаю только скриншоты с именем firefox_screenshotname.png - без хрома!

Есть ли способ добиться этого?


person OliverDeLange    schedule 14.11.2016    source источник


Ответы (1)


Отвечая на мой собственный вопрос, оказывается, я определил свою переменную «браузер» не в том месте. Согласно https://theintern.github.io/intern/#interface-object любая переменная, которая будет изменена (или использована в моем случае) тестами, должна быть объявлена ​​в функции набора тестов.

define(function (require) {
    var bdd = require('intern!bdd');
    var expect = require('intern/chai!expect');
    var wiremock = require('./wiremock');
    var fs = require('intern/dojo/node!fs');

    // var browser <- doesn't work here!

    bdd.describe('some thing', function () {

        var browser; // Works here!

        bdd.before(function(){
            this.remote.setFindTimeout(5000);
            browser = this.remote.session.capabilities.browserName;
        });

        bdd.it('should search for a postcode', function () {
            return this.remote
                .get(require.toUrl('index.html'))
                .findAllByCssSelector('.thing')
                .getVisibleText()
                .then(function (text) {
                    expect(text).to.contain('Some stuff');
                })
                .takeScreenshot()
                .then(function (screenshot) {
                  saveScreenshot("thing.png", screenshot);
                });
        });

        function saveScreenshot(name, screenshot) {
            var dir = './screenshots';
            if (!fs.existsSync(dir)){
              fs.mkdirSync(dir);
            }
            fs.writeFileSync(dir + '/' + browser + '_' + name, screenshot)
        };
    });
});
person OliverDeLange    schedule 14.11.2016