【问题标题】:In feature file with Background , @Before and @After hooks, @Before is executed even before the scenario started在具有 Background 、 @Before 和 @After 钩子的功能文件中,@Before 甚至在场景开始之前执行
【发布时间】:2019-08-09 03:33:19
【问题描述】:

在我的项目中,我有 3 个功能文件,分别命名为 Login.feature、Home.feature 和 TransferFund.feature。每个都有背景:在它们中提到,在 Login.feature 的步骤定义文件中,我提到了 @Before 和 @After 钩子。我对钩子的理解是,@Before、Background:、Scenario:、@After,按照这个顺序执行应该发生,但是@After在Backgound之后立即执行,使得执行流程为@Before,Background,@After,@ Before, Scenario,Background,@After [@Before, Scenario,Background,@After 顺序重复,因为我有多个场景]

我已经包含了sop语句以了解流程,谷歌它但没有找到相关帮助

预期: 流程按此顺序 @之前,背景,@之后, @Before,背景,场景,@After @Before,背景,场景,@After
实际的: @Before,场景,背景,@After @Before,场景,背景,@After

 **Login.feature**
Feature: Validate login page
Background: User navaigates to login page
Given User launch site

Scenario: validate all tabs and logo
Given User should see all tabs
And User should see logo 

Scenario: validate error message
Given user entered wrong credentails 
When User click login butotn
Then User should see error message
Scenario: validate fotter details
Given user should see all footer details

Scenario: validate successful login
When User click SignIn link
Then User should navigate to SignInPage
Then User should enter username and password
Then User should click LogInBUtton
Then User User should be on Home page

**LoginPageStepDefination.java**
@Before
public void setUp(){
    System.out.println("-----Browser created and launched-----");
}

@After
public void tearDown(){
    System.out.println("-----Browser is closed-----");
}

@Given("^User launch site$")
public void user_launch_site() throws Throwable {
}

@Given("^User should see all tabs$")
public void user_should_see_all_tabs() throws Throwable {
}

    @Given("^User should see logo$")
public void user_should_see_logo() throws Throwable {
}

@Given("^user entered wrong credentails$")
public void user_entered_wrong_credentails() throws Throwable {
}

@When("^User click login butotn$")
public void user_click_login_butotn() throws Throwable {
}

@Then("^User should see error message$")
public void user_should_see_error_message() throws Throwable {
}

@Given("^user should see all footer details$")
public void user_should_see_all_footer_details() throws Throwable {
}
@When("^User click SignIn link$")
public void user_click_SignIn_link() throws Throwable {
}

@Then("^User should navigate to SignInPage$")
public void user_should_navigate_to_SignInPage() throws Throwable {
}

@Then("^User should enter username and password$")
public void user_should_enter_username_and_password() throws Throwable {
}

@Then("^User should click LogInBUtton$")
public void user_should_click_LogInBUtton() throws Throwable {
}

@Then("^User User should be on Home page$")
public void user_User_should_be_on_Home_page() throws Throwable {
}

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
dryRun=true,
strict=false,
features={"src/main/java/com/qa/features/"},
glue={"src/main/java/com/qa/stepdefinations/"},
plugin={"pretty","html:test-output/cucumber.html"}
)
public class TestRunner {}
-------------------------------------------------------------
out put on console 
-------------------------------------------------------------
Feature: Validate login page
-----Browser created and launched-----

Background: User navaigates to login page # 
C:/D/QURATE/CucumberBddHooksFlow/src/main/java/com/qa/
features/Login.feature:3
Given User launch site                  # 
LoginPageStepDefination.user_launch_site()
-----Browser is closed-----
-----Browser created and launched-----

Scenario: validate all tabs and logo # 
C:/D/QURATE/CucumberBddHooksFlow/src/main/java/com/qa/
features/Login.feature:6
Given User should see all tabs     # 
LoginPageStepDefination.user_should_see_all_tabs()
And User should see logo           # 
LoginPageStepDefination.user_should_see_logo()

Background: User navaigates to login page # 
C:/D/QURATE/CucumberBddHooksFlow/src/main/java/com/qa/
features/Login.feature:3
Given User launch site                  # 
LoginPageStepDefination.user_launch_site()
-----Browser is closed-----
-----Browser created and launched-----

Scenario: validate error message       # 
C:/D/QURATE/CucumberBddHooksFlow/src/main/java/com/qa/
features/Login.feature:10
Given user entered wrong credentails # 
LoginPageStepDefination.user_entered_wrong_credentails()
When User click login butotn         # 
LoginPageStepDefination.user_click_login_butotn()
Then User should see error message   # 
LoginPageStepDefination.user_should_see_error_message()

Background: User navaigates to login page # 
C:/D/QURATE/CucumberBddHooksFlow/src/main/java/com/qa/
features/Login.feature:3
Given User launch site                  # 
LoginPageStepDefination.user_launch_site()
-----Browser is closed-----
-----Browser created and launched-----

Scenario: validate fotter details          # 
C:/D/QURATE/CucumberBddHooksFlow/src/main/java/com/qa/
features/Login.feature:15
Given user should see all footer details # 
LoginPageStepDefination.user_should_see_all_footer_details()

Background: User navaigates to login page # 
C:/D/QURATE/CucumberBddHooksFlow/src/main/java/com/qa/
features/Login.feature:3
Given User launch site                  # 
LoginPageStepDefination.user_launch_site()
-----Browser is closed-----

Scenario: validate successful login            # 
C:/D/QURATE/CucumberBddHooksFlow/src/main/java/com/qa/
features/Login.feature:18
When User click SignIn link                  # 
LoginPageStepDefination.user_click_SignIn_link()
Then User should navigate to SignInPage      # 
LoginPageStepDefination.user_should_navigate_to_SignInPage()
Then User should enter username and password # 
LoginPageStepDefination.user_should_enter_username_and_password()
Then User should click LogInBUtton           # 
LoginPageStepDefination.user_should_click_LogInBUtton()
Then User User should be on Home page        # 
LoginPageStepDefination.user_User_should_be_on_Home_page()

4 Scenarios (4 passed)
15 Steps (15 passed)
0m0.115s

我的虚拟项目的 Git 路径: https://github.com/RajaRaviTeja/DummyCucumberProjectForHooksFlow.git

非常感谢任何帮助

【问题讨论】:

  • 请发布您已经尝试过的代码,而不是链接到它。
  • @GregBurghardt 我已经添加了代码以及打印在控制台上的输出。

标签: selenium junit cucumber cucumber-junit junit-runner


【解决方案1】:

不要依赖控制台输出来确认您对应用程序流程的看法。 Cucumber 输出到控制台的方式很复杂。而是在第一个 Given 和最后一个 Then 的钩子方法中使用调试器停止您的应用程序。我想你会发现工作流程是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多