使步骤定义动态以处理任何传入文本
Make step definition dynamic to handle any incoming text
我必须 运行 test1.feature
提交两个 url 文件。在其中一个 url 中,我有一个名为 EIN
的字段,但在第二个 url 中,相同的字段名为 ABN
我们如何使步骤定义动态化以处理第二个字符串中的任何文本。
Url 1 : https://testsite.us.com/student
该字段被命名为“EIN”
Url 2: https://testsite.au.com/student
该字段被命名为“ABN”
test1.feature
And I type "11 234 234 444" in "ABN" field
step_definition
//在文本框输入字段中键入文本值
Then('I type {string} in {string} field', (textval, textboxname) => {
switch (textboxname) {
case "Email":
case "Work Phone":
case "ABN":
case "EIN":
case "ACN":
cy.get('#profile_container').parent().find('.fieldHeaderClass').contains(textboxname)
.next().find('input')
.clear({force:true})
.type(textval, { force: true });
break;
//final else condition
default:
cy.get('#profile_container').parent().find('.fieldHeaderClass').contains(textboxname)
.next()
.type(textval, { force: true });
}
});
首先是一个很好的提示:使用页面对象(POM 设计模式)。页面对象是您在包含所有选择器代码 (cy.get(......)
) 的 stepdefinitions 文件中导入的对象(在第三个 .js 文件中,除了您的功能和 stepdifinitions)。您不想在步骤定义中使用选择器代码。使它变得混乱且更难阅读。
关于您的问题:如果您想对(各种)输入值重复相同的逻辑。为什么不只写你的逻辑(这样就没有长的 case 语句)并使用 Scenario Outline 为不同的输入重复你的步骤?如果你的逻辑每次都必须不同,那就不要费心去解决这个问题。那么你应该简单地为不同的逻辑编写不同的步骤..
这是场景大纲的示例(在 .feature 中):
Scenario Outline: Scenario Outline name
Given I type "<textval>" in "<textboxname>" field
Examples:
| textval | textboxname |
| some_value | ABN |
| some_other_value | EIN |
| some_other_value_2 | email |
| some_other_value_3 | ACN |
| some_other_value_4 | Work Phone |
结论:使用场景大纲重复逻辑。如果不同的输入需要不同的逻辑,那么再写一个步骤定义,不要试图将不同的逻辑组合和剪辑成 1 个步骤。
我必须 运行 test1.feature
提交两个 url 文件。在其中一个 url 中,我有一个名为 EIN
的字段,但在第二个 url 中,相同的字段名为 ABN
我们如何使步骤定义动态化以处理第二个字符串中的任何文本。
Url 1 : https://testsite.us.com/student
该字段被命名为“EIN”
Url 2: https://testsite.au.com/student
该字段被命名为“ABN”
test1.feature
And I type "11 234 234 444" in "ABN" field
step_definition
//在文本框输入字段中键入文本值
Then('I type {string} in {string} field', (textval, textboxname) => {
switch (textboxname) {
case "Email":
case "Work Phone":
case "ABN":
case "EIN":
case "ACN":
cy.get('#profile_container').parent().find('.fieldHeaderClass').contains(textboxname)
.next().find('input')
.clear({force:true})
.type(textval, { force: true });
break;
//final else condition
default:
cy.get('#profile_container').parent().find('.fieldHeaderClass').contains(textboxname)
.next()
.type(textval, { force: true });
}
});
首先是一个很好的提示:使用页面对象(POM 设计模式)。页面对象是您在包含所有选择器代码 (cy.get(......)
) 的 stepdefinitions 文件中导入的对象(在第三个 .js 文件中,除了您的功能和 stepdifinitions)。您不想在步骤定义中使用选择器代码。使它变得混乱且更难阅读。
关于您的问题:如果您想对(各种)输入值重复相同的逻辑。为什么不只写你的逻辑(这样就没有长的 case 语句)并使用 Scenario Outline 为不同的输入重复你的步骤?如果你的逻辑每次都必须不同,那就不要费心去解决这个问题。那么你应该简单地为不同的逻辑编写不同的步骤..
这是场景大纲的示例(在 .feature 中):
Scenario Outline: Scenario Outline name
Given I type "<textval>" in "<textboxname>" field
Examples:
| textval | textboxname |
| some_value | ABN |
| some_other_value | EIN |
| some_other_value_2 | email |
| some_other_value_3 | ACN |
| some_other_value_4 | Work Phone |
结论:使用场景大纲重复逻辑。如果不同的输入需要不同的逻辑,那么再写一个步骤定义,不要试图将不同的逻辑组合和剪辑成 1 个步骤。