可以在Cucumber(java)中创建“Master Step”吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以在Cucumber(java)中创建“Master Step”吗?相关的知识,希望对你有一定的参考价值。

可以在Cucumber(java)中创建“Master Step”吗?

例如,我创建了许多使用重复代码的步骤文件,重复的代码在每个步骤文件中初始化浏览器等。

甚至可以创建一个主步骤文件,它将容纳驱动程序设置等,因此在每个步骤之前使用'Cucumber Before'执行设置。

我的代码:

public class LoginStep {

WebDriver driver;
LoginPage loginPage;

@Before
public void setUp() throws Exception {
    System.setProperty("webdriver.chrome.driver",
            "C:\Users\deltaUser\Desktop\CucumberFramework\PimCucumberFramework\src\test\java\resources\other\chromedriver.exe");
    this.driver = new ChromeDriver();
    this.driver.manage().window().maximize();
    this.driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);

    loginPage = PageFactory.initElements(driver, LoginPage.class);
}

@Given("^User is on the PIM login page$")
public void user_is_on_the_PIM_login_page() throws Throwable {
    loginPage.loginIntoAccount();
    // loginPage.test();
}

@And("^enters the correct username$")
public void enters_the_correct_username() throws Throwable {
    System.out.println("User neters the correct password inside the password textefield");
    // loginPage.test2();
}

@And("^enters the correct password$")
public void enters_the_correct_password() throws Throwable {
    System.out.println("Entered the correct password");
}

@When("^clicks on the login button$")
public void clicks_on_the_login_button() throws Throwable {
    System.out.println("Clicked on the login button");
}

@Then("^user should be taken to the successful login page$")
public void user_should_be_taken_to_the_successful_login_page() throws Throwable {
    System.out.println("Succesffully taken to the login page.");
}

}

我已经尝试了下面列出的以下代码,但代码dosnt工作似乎打开浏览器但其他步骤不起作用(好像它已经创建了一个单独的驱动程序实例):

public class MasterStep {
WebDriver driver;
LoginPage loginPage;

@Before
public void setUp() throws Exception {
    System.setProperty("webdriver.chrome.driver",
            "C:\Users\gianni.bruno\Desktop\BuyAGiftCucumberFramework\PimCucumberFramework\src\test\java\resources\other\chromedriver.exe");
    this.driver = new ChromeDriver();
    this.driver.manage().window().maximize();
    this.driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);

    loginPage = PageFactory.initElements(driver, LoginPage.class);
}

}

答案

对的,这是可能的。使用继承的概念。

第1步:创建基类

package com.base;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class TestBase2 {

    public static WebDriver driver = null;

    public void initialize() {

        System.setProperty("webdriver.chrome.driver", "src/com/drivers/chromedriver.exe");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.get("https://www.google.co.in");
    }
}

第2步:使用extends关键字继承此类,并在需要时调用initialize()方法。

另一答案

黄瓜提供了可用于此的前后挂钩。

钩子是可以在Cucumber执行周期中的各个点运行的代码块。它们通常用于在每个场景之前和之后设置和拆除环境。

钩子在每个场景的第一步之前运行之前。

注释方法风格:

@Before
public void doSomethingBefore() {
}

Lambda风格:

Before(() -> {
});

在每个方案的最后一步之后运行挂钩后,即使步骤失败,未定义,挂起或跳过。

注释方法风格:

@After
public void doSomethingAfter(Scenario scenario){
    // Do something after after scenario
}

Lambda风格:

After((Scenario scenario) -> {
});

scenario参数是可选的,但如果使用它,则可以检查方案的状态。

以上是关于可以在Cucumber(java)中创建“Master Step”吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中是不是可以在 main 方法中创建一个过程?

我可以在 Scala 中创建一个具有 Java 保护访问的方法吗?

如何在 Java 中创建临时目录/文件夹?

在Java中创建泛型类型的实例?

Java 应用程序可以在 LibreOffice 中创建报告吗?

如何在 Java 中创建一个空流?