Java 如何在功能文件中概括登录步骤并避免重复步骤?
我在自动化项目中使用Selenium+Cucumber,并使用Java编写。我已经编写了一个功能文件,其中我在每个场景中重复了4-5个登录步骤。下面是在每个场景中重复出现的登录行Java 如何在功能文件中概括登录步骤并避免重复步骤?,java,selenium,cucumber,bdd,cucumber-jvm,Java,Selenium,Cucumber,Bdd,Cucumber Jvm,我在自动化项目中使用Selenium+Cucumber,并使用Java编写。我已经编写了一个功能文件,其中我在每个场景中重复了4-5个登录步骤。下面是在每个场景中重复出现的登录行 Scenario: Display the relevant items assigned when logged in as an testUser Given I am on the login page And I fill email with valid testUser email addr
Scenario: Display the relevant items assigned when logged in as an testUser
Given I am on the login page
And I fill email with valid testUser email address
And I fill password with valid testUser password
And I press Log in
When I click on the selector
Then I should see all the items assigned to my testUser account
private String user;
@Before
public void before(Scenario scen) {
this.user = scen.getName().substring(scen.getName().indexOf('-') + 2);
}
这里,keywork“testUser”是参数化的。有时,对另一个用户(如“stageUser”)重复相同的步骤。对于此类步骤,Cucumber是否提供了以某种方式概括这些步骤的方法?因为每一个场景都是从这6行开始的,这样就使得scearios看起来更大了,并且有了这些重复的步骤
任何建议都将不胜感激。使用@Before和@After注释分别在每个场景之前和之后运行。在我们需要执行一些全局设置/清理的情况下:@ BePixEt和@ SuthSuth < P>您应该考虑将共同步骤移到后台。 看起来有点像黑客,但您可以在下面的场景描述中提到用户
Background:
Given Do given
When Do when
Then Do then
Scenario: User is - Test User One
And user name is
Scenario: User is - Test User Two
And user name is
然后在Before钩子中捕获该用户。然后,用户将在场景中的各个步骤中可用
Scenario: Display the relevant items assigned when logged in as an testUser
Given I am on the login page
And I fill email with valid testUser email address
And I fill password with valid testUser password
And I press Log in
When I click on the selector
Then I should see all the items assigned to my testUser account
private String user;
@Before
public void before(Scenario scen) {
this.user = scen.getName().substring(scen.getName().indexOf('-') + 2);
}
编写更好的场景和步骤。你的一切都是关于你是如何登录的,所以重复是痛苦的。相反,写一些只关于你正在做什么的步骤;这些更易于重用 所以
Scenario: Login
Given I am registered
When I login
Then I should be logged in
后来
Feature: Something that requires me to be logged in
Background
Given I am logged in
Scenario: Do something
When I do something
Then something should be done
看看我是如何把一大堆背景简化成更简单、更抽象的东西的
我将在这里给出一些关于实现的提示
Given I am logged in
@i = create_registered_user
login(user: @i
end
When I login
login(user: @i)
end
Given I am registered
@i = create_registered_user
end
您可以以任何复杂程度应用此方法。请注意,在上一个场景中,我们是如何使用相对复杂的注册行为的,而该场景或功能甚至没有意识到它(注册是登录的一部分)。您是说在Java类中,对吗?即使这样,我如何参数化电子邮件地址/用户名?因为它会随着场景的变化而变化,尽管步骤是相同的,您认为将这些场景划分为不同的功能文件是有意义的吗?将一个用户的场景与多个用户的场景分开,并在第二个文件中参数化@before步骤。感谢Valentina的建议,但考虑到我使用的页面对象模型,这对我来说没有多大意义:(