问题描述
我正在尝试将黄瓜“步骤”对象的步骤描述的字符串/正则表达式记录到控制台。这是一个示例步骤
Given Alice is hungry
...这是步骤定义的第一行
Given( /^Alice is hungry$/,() => {
我正在尝试使用作为参数提供的“step”对象的字符串表示,在 webdriverio 的特定于黄瓜的钩子的上下文中将“Given Alice is Hung”记录到控制台。运行
beforeStep: function ({ uri,feature,step },context) {
console.log(`Running "${JSON.stringify(step,null,4)}"`);
}
...产生这个输出:
[0-0] Running "{
"uri": "featureFiles\\dev\\my-first-feature-file.feature","feature": {
"type": "Feature","tags": [],"location": {
"line": 8,"column": 1
},"language": "en","keyword": "Functionality","name": "Eating too many cucumbers is not good for you","children": [
{
"type": "Scenario","tags": [
{
"type": "Tag","location": {
"line": 10,"column": 3
},"name": "@Szenario-Eating-all-the-cucumbers"
}
],"location": {
"line": 11,"column": 3
},"keyword": "Szenario","name": "Eating a few is no problem","steps": [
{
"type": "Hook","location": {
"line": 187,"column": 0,"uri": "node_modules\\@wdio\\cucumber-framework\\build\\index
.js"
},"keyword": "Hook","text": ""
},{
"type": "Step","location": {
"line": 12,"keyword": "Given","text": "Alice is hungry"
},"location": {
"line": 13,"column": 5
},"keyword": "When ","text": "she eats 3 cucumbers'"
},"location": {
"line": 14,"keyword": "Then ","text": "she will be full"
},
但是,当我使用
beforeStep: function ({ uri,context) {
// eslint-disable-next-line no-undef
console.log(\`Running step "${step.text}"`);
}
...我得到的是
[0-0] Running "undefined"
[0-0] Running "undefined"
我已经尝试了这两个选项:
console.log(`Running "${step.feature.children.steps.text}"`);
console.log(`Running "${feature.children.steps.text}"`);
在这两种情况下,这都会产生以下结果:
[0-0] Error in "BeforeStep Hook"
Cannot read property 'text' of undefined
我做错了什么?
解决方法
让我们以这个例子为例:
${step.feature.children.steps.text}
children
是一个数组,所以你不能只输入 .steps
。您需要先访问某个元素,例如 [0].steps
。
和steps类似,steps也是一个数组:
"steps": [ ... ]
此 ${step.text}
不起作用,因为 step
没有属性文本。它有以下键:
uri
feature
,
我接受了 pavelsman 的答案作为问题的解决方案。
对于想要在执行时将黄瓜步骤记录到控制台的任何人,只需将其添加到 wdio-configuration 文件中即可:
let scenarioIndex = 0;
let stepIndex = 0;
beforeStep: function ({uri,feature,step},context) {
if(typeof step.feature.children[scenarioIndex] !== "undefined") {
let keyword = step.feature.children[scenarioIndex].steps[stepIndex].keyword;
let stepText = step.feature.children[scenarioIndex].steps[stepIndex].text;
if (stepText !== "") {
console.log(keyword + stepText);
}
stepIndex++;
}
},afterScenario: function () {
scenarioIndex++;
stepIndex = 0;
},