在测试中访问Intern环境以获取浏览器名称

时间:2016-11-14 15:23:22

标签: 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的屏幕截图 - 无铬!

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题 - 结果证明我已经定义了我的浏览器'变量在错误的地方。根据{{​​3}},任何将由测试修改(或在我的情况下使用)的变量都应该在测试套件函数中声明。

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)
        };
    });
});