Как я могу реализовать Hooks In Cucumber в виде отдельного файла класса? - PullRequest
1 голос
/ 31 марта 2020

Это базовый класс.

package utils;


    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Properties;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    import org.openqa.selenium.support.ui.WebDriverWait;
    import io.github.bonigarcia.wdm.WebDriverManager;

    public class BaseClass {

        public static WebDriver driver;
        public WebDriverWait wait;
        public static Properties prop;
        FileInputStream fis;
        static String browserName;
        String currentDir = System.getProperty("user.dir");
        public BaseClass()
        {
            prop=new Properties();

            try {
                fis = new FileInputStream(currentDir + "/src/test/java/config/data.properties");
            } catch (FileNotFoundException e1) {

            }
            try {
                prop.load(fis);
            } catch (IOException e) {

            }
        }

        public static void initialization()
        {
            browserName = prop.getProperty("browser");
            if (browserName.equalsIgnoreCase("Chrome"))
            {
                WebDriverManager.chromedriver().setup();
                driver = new ChromeDriver();

            }
            else if(browserName.contains("Firefox"))
            {
                WebDriverManager.firefoxdriver().setup();
                driver = new FirefoxDriver();
            }
            else
            {
                WebDriverManager.iedriver().setup();
                driver = new InternetExplorerDriver();
            }

            driver.manage().window().maximize();
            driver.get(prop.getProperty("url"));
        }

    }

Это страница входа

package Pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import utils.BaseClass;

public class LoginPage extends BaseClass {
    WebDriver driver;

    public LoginPage(WebDriver ldriver)
    {
        this.driver= ldriver;
        wait = new WebDriverWait(driver, 90);
        PageFactory.initElements(driver, this);

    }

    @FindBy(how=How.XPATH, using="(//*[@type='radio'])[1]//parent::div")
    WebElement radioAccount;
    @FindBy(how=How.XPATH, using="(//*[@type='radio'])[2]//parent::div")
    WebElement radioVcNumber;
    @FindBy(how=How.XPATH, using="(//*[@type='radio'])[3]//parent::div")
    WebElement macId;
    @FindBy(how=How.XPATH, using="(//*[@type='radio'])[4]//parent::div")
    WebElement vSc;
    @FindBy(how=How.XPATH, using="(//*[@type='radio'])[5]//parent::div")
    WebElement rMn;

    @FindBy(how=How.XPATH,using="//*[@id='txt_InputVal']")
    WebElement enterRmn;

    @FindBy(how=How.XPATH, using="//*[@id='btnsubmit']")
    WebElement buttonSubmit;
    public void clickRadioButtons()
    {
        wait.until(ExpectedConditions.visibilityOf(radioAccount));
        radioAccount.click();
        radioVcNumber.click();
        macId.click();
        vSc.click();
        rMn.click();
    }

    public void loginWithRmn(String num)
    {
        rMn.click();
        wait.until(ExpectedConditions.visibilityOf(enterRmn));
        enterRmn.sendKeys(num);
    }

    public void clickOnLoginButton()
    {
        buttonSubmit.click();
    }
}

Это определение шага страницы входа.

package stepDefs;

import Pages.LoginPage;
import cucumber.api.java.After;
import cucumber.api.java.Before;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import utils.BaseClass;

public class LoginStepDef extends BaseClass{

    LoginPage login;
    String title;


    @Given("^User has launched URL on browser$")
    public void user_has_launched_URL_on_browser()
    {
        BaseClass.initialization();
        System.out.println("Browser Launched");
        login = new LoginPage(driver);
    }

    @Given("^User is able to select different account types$")
    public void user_is_able_to_select_different_account_types()
    {
        login = new LoginPage(driver);
        login.clickRadioButtons();
    }

    @When("^User enters tries to login with Mobile Number \"([^\"]*)\"$")
    public void user_enters_tries_to_login_with_Mobile_Number(String arg1)
    {
        login.loginWithRmn(arg1);
    }

    @Then("^User is logged in$")
    public void user_is_logged_in()
    {
        login.clickOnLoginButton();
    }

    @After()
    public void tearDown()
    {
        System.out.println("Browser Closed");
        driver.quit();
    }

}

Это тест runner.

package runners;

import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
        features= {"src/test/java/featureFiles"},
        glue= {"stepDefs"},
        monochrome=true,
        dryRun=false,
        plugin= {"pretty"}
        )
public class TestRunnerLogin {

}

Как я могу реализовать хуки?

Хуки как другой файл класса (Хуки. java), чтобы мне не приходилось писать снова и снова вызывать браузер для дальнейших страниц. Я хочу, чтобы Hooks. java был отдельным классом и не реализован в определенном шаге.

1 Ответ

1 голос
/ 01 апреля 2020

это мой файл HOOKS. Может быть, это может помочь вам:

public class Hooks {
public static WebDriver driver;

@Before
public void startTest(Scenario scenario) {
    System.setProperty("webdriver.chrome.driver", "src/test/resources/mac/chromedriver");
    driver = new ChromeDriver();
    driver.get("http://google.com");
}

@After
public void tearDown(Scenario scenario) {
    Helper.screenshot(scenario);
    driver.close();
}

public static WebDriver getDriver() { 
return driver;
}
}

и следуйте инструкциям по использованию:

public class LoginSteps {

private LoginPage loginPage = new LoginPage(Hooks.getDriver());

@When("something")
public void signCheck()  {
    Assert.assertTrue("Login", homePage.checkPage());
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...