由于某种原因,我在cucumberjs中编写了一个基本的钩子,它没有按预期工作。当场景失败时,它应该附加截图并编写浏览器控制台日志。但它附加了html报告中的功能之后的屏幕截图,并在第二个方案enter image description here之间打印浏览器控制台日志。任何线索有什么问题?
this.After(function(scenario, callback) {
if (scenario.isFailed()) {
global.browser.takeScreenshot().then(function(base64png) {
var decodedImage = new Buffer(base64png,'base64').toString('binary');
scenario.attach(decodedImage, 'image/png');
});
global.browser.manage().logs().get('browser').then(function (browserlog){
browserlog.forEach(function (log) {
if (log.level.value > 900) {
console.error(log.message.substring(log.message.indexOf('Error'),log.message.indexOf('\n')))
}
})
});
callback();
} else {
callback();
}
});
答案 0 :(得分:0)
根据cucumberjs github页面https://github.com/cucumber/cucumber-js#attachments
可以使用stream.Readable附加图像和其他二进制数据。在这种情况下,将回调传递给attach()将成为强制性的:
你可以将单个钩子后分成两个独立的钩子:
this.After(function(scenario, next) {
browser.takeScreenshot().then(function(png) {
var decodedImage = new Buffer(png, 'base64').toString('binary');
scenario.attach(decodedImage, 'image/png', next);
}, function(err) {
next(err);
});
});
this.After(function(scenario, next) {
global.browser.manage().logs().get('browser').then(function (browserlog){
browserlog.forEach(function (log) {
if (log.level.value > 900) {
console.error(log.message.substring(log.message.indexOf('Error'),log.message.indexOf('\n')))
}
});
});
});