2016-11-14 59 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) 
     }; 
    }); 
});