2016-11-14 56 views
0

我想在我的测试和每个浏览器中截取每个场景的截图。访问实习环境中测试获取浏览器名称

目前我有失败的测试在Firefox上,但不是铬,所以我想看一个很好的方式来快速查看失败,所以我想前缀的浏览器名称的截图文件名。

我可以通过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 - 无铬!

有没有办法做到这一点?

回答

0

回答我自己的问题 - 事实证明,我在错误的地方定义了我的'浏览器'变量。根据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) 
     }; 
    }); 
});