如何访问 cucumber 的 "step" 对象的 json 的所有 "text" 属性并将它们记录到控制台?
How can I access all the "text" properties of the json of cucumber's "step"-object and log them to the console?
我正在尝试将黄瓜 'step'-对象的步骤描述的 string/regex 记录到控制台。这是一个示例步骤
Given Alice is hungry
...这是步骤定义的第一行
Given( /^Alice is hungry$/, () => {
我正在尝试将 'Given Alice is hungry' 记录到控制台,使用作为参数提供的 'step'-对象的字符串表示,在 webdriverio 的黄瓜特定钩子的上下文中。 运行
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,
"column": 3
},
"keyword": "Given",
"text": "Alice is hungry"
},
{
"type": "Step",
"location": {
"line": 13,
"column": 5
},
"keyword": "When ",
"text": "she eats 3 cucumbers'"
},
{
"type": "Step",
"location": {
"line": 14,
"column": 5
},
"keyword": "Then ",
"text": "she will be full"
},
然而,当我使用
beforeStep: function ({ uri, feature, step }, 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;
},
我正在尝试将黄瓜 'step'-对象的步骤描述的 string/regex 记录到控制台。这是一个示例步骤
Given Alice is hungry
...这是步骤定义的第一行
Given( /^Alice is hungry$/, () => {
我正在尝试将 'Given Alice is hungry' 记录到控制台,使用作为参数提供的 'step'-对象的字符串表示,在 webdriverio 的黄瓜特定钩子的上下文中。 运行
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,
"column": 3
},
"keyword": "Given",
"text": "Alice is hungry"
},
{
"type": "Step",
"location": {
"line": 13,
"column": 5
},
"keyword": "When ",
"text": "she eats 3 cucumbers'"
},
{
"type": "Step",
"location": {
"line": 14,
"column": 5
},
"keyword": "Then ",
"text": "she will be full"
},
然而,当我使用
beforeStep: function ({ uri, feature, step }, 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;
},