我想在我的测试和每个浏览器中截取每个场景的屏幕截图。
目前我在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
的屏幕截图 - 无铬!
有没有办法实现这个目标?
答案 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)
};
});
});