Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在功能文件中概括登录步骤并避免重复步骤?_Java_Selenium_Cucumber_Bdd_Cucumber Jvm - Fatal编程技术网

Java 如何在功能文件中概括登录步骤并避免重复步骤?

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

我在自动化项目中使用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 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的建议,但考虑到我使用的页面对象模型,这对我来说没有多大意义:(