我正在使用量角器 - 黄瓜 - 框架,我想为我编写的测试生成html报告。我决定使用cucumber-html-reporter实现它。在我的hooks.js中我写了一个。在对象上截取测试失败的截图:
this.After(function(scenario, callback) {
if (scenario.isFailed()) {
browser.takeScreenshot().then(function(buffer) {
return scenario.attach(new Buffer(buffer, 'base64'), function(err) {
callback(err);
});
});
}
else {
callback();
}
});
一切正常,生成报告并截取屏幕截图并仅在测试失败时附加。但是当After step继续时(因此当出现故障时)我也收到了一条错误消息:
函数在5000毫秒后超时
我想摆脱这条消息,因为它也出现在我的HTML报告中。任何人都可以为我提供解决方案吗?
答案 0 :(得分:2)
下面的代码对我有用。我在步骤定义js文件中添加了这个。在报告的场景结束时,它会添加屏幕截图。
defineSupportCode(({After}) => {
After(function(scenario) {
if (scenario.isFailed()) {
var attach = this.attach;
return browser.takeScreenshot().then(function(png) {
var decodedImage = new Buffer(png, "base64");
return attach(decodedImage, "image/png");
});
}
});
});
答案 1 :(得分:0)
您的代码似乎绝对正常。 也许它只需要更长的时间?
你可以在这样的钩子上设置超时:
this.After({ timeout: 20 * 1000 }, function (scenario, callback) {
if (scenario.isFailed()) {
browser.takeScreenshot().then(function(buffer) {
return scenario.attach(new Buffer(buffer, 'base64'), function(err) {
callback(err);
});
});
}
else {
callback();
}
});
答案 2 :(得分:0)
我有类似的问题,即使在等待60秒后也失败了。问题是我没有实施适当的回调。
以下代码对我有用。 (我是JavaScript新手,所以我的回调用法可能是正确的方法。如果有更好的方法,请随时教我。:))
After(function(scenario,done)
{
const world = this;
if (scenario.result.status === 'failed') {
browser.takeScreenshot().then(function (stream) {
let decodedImage = new Buffer(stream.replace(/^data:image\/(png|gif|jpeg);base64,/, ''), 'base64');
world.attach(decodedImage, 'image/png');
}).then(function () {
done();
});
}else {
done();
}
});