任务:
这是我今天的任务。我已经完成了所有这些,包括编写场景测试,selenium设置,转换管道以及其他所需的一切。
唯一的问题是 - 我无法弄清楚如何找到失败的情景步骤并拍摄页面的屏幕截图。
问题详情: 我在步骤定义中放置了以下代码,该步骤适用于每个方案步骤
//file: features/setpdefinitions/common.step.js
var commonWrapper = function commonWrapper() {
this.World = require('../support/world').World;
this.Before(function (next) {
this.initBrowser(next);
});
this.After(function (next) {
this.browser.quit(next);
});
this.StepResult(function (event, callback) {
var stepResult = event.getPayloadItem('stepResult');
console.log(stepResult.isFailed());
callback();
});
};
module.exports = commonWrapper;
World
包含浏览器启动方法。
并且,这是我正在测试的示例功能方案
Feature: Forgot Password
As a user of Booking My account
I want to reset my password
So that I can login to my account when I forget my password
Scenario: On unsuccessful entering invalid email id
Given I am on forgot password page
When I enter invalid email "invalidemail-someDomain.com"
And click submit button
Then I should see validation message "Please enter a valid email."
问题在于上下文数据。我以某种方式无法将传递给after / before方法的scenario
作为第一个参数。我尝试了在cucumberjs源代码中给出的代码但是没有成功。所以,我开始添加stepResult
方法,每次完成一个步骤时都会运行。一种相对类似的方法。
根据文档,isFailed()
方法根据步骤结果返回一个布尔值。但是,无论步骤失败还是通过,我总是得到false
。我尝试了它的alter-ego isSuccessful()
,无论如何都返回true
。
所以,
我对TDD比较陌生,但到目前为止,这是一次很棒的体验。
答案 0 :(得分:7)
你需要的是一个后钩
创建文件features / support / after_hooks.js
module.exports = function() {
this.After(function (scenario, callback) {
if (scenario.isFailed()) {
// Do your after stuff here
}
callback();
});
};
请注意,这仅在每个功能
之后执行答案 1 :(得分:1)
您可以在(cucumberjs 1.x)https://github.com/cucumber/cucumber-js/blob/1.x/lib/cucumber/api/scenario.js#L27
中获取更多详细信息getKeyword: function getKeyword() {
return astScenario.getKeyword();
},
getName: function getName() {
return astScenario.getName();
},
getDescription: function getDescription() {
return astScenario.getDescription();
},
getUri: function getUri() {
return astScenario.getUri();
},
getLine: function getLine() {
return astScenario.getLine();
},
getTags: function getTags() {
return astScenario.getTags();
},
isSuccessful: function isSuccessful() {
return scenarioResult.getStatus() === Cucumber.Status.PASSED;
},
isFailed: function isFailed() {
return scenarioResult.getStatus() === Cucumber.Status.FAILED;
},
isPending: function isPending() {
return scenarioResult.getStatus() === Cucumber.Status.PENDING;
},
isUndefined: function isUndefined() {
return scenarioResult.getStatus() === Cucumber.Status.UNDEFINED;
},
isSkipped: function isSkipped() {
return scenarioResult.getStatus() === Cucumber.Status.SKIPPED;
},
getException: function getException() {
return scenarioResult.getFailureException();
},
getAttachments: function getAttachments() {
return attachments;
},
clearAttachments: function clearAttachments() {
attachments = [];
},
答案 2 :(得分:0)
创建afterhook.js并检查失败的情况 您可以使用browser.saveScreenshot保存屏幕截图。 保存屏幕截图时,请在文件名上使用时间戳,并从版本控制中排除屏幕截图
module.exports = function() {
this.After((scenario, callback) => {
if (scenario.isFailed()) {
const d = new Date();
browser.saveScreenshot(
`./e2e/screenshots/screenshot-${d.toISOString()}.png`
);
}
callback();
});
};