Что такое хороший способ написания Cucumber Framework - PullRequest
0 голосов
/ 20 февраля 2020

Я новичок в Cucumber, и я проектирую фреймворк. Какой хороший способ написания фреймворка.

На данный момент я спроектировал фреймворк следующим образом (Page Object Model)

Feature File
Given User is on home screen

Step Definition file
@Given("^User is on home screen$")
public void User_is_on_home_screen(String Username,String Pwd)
{
     lp.enterDetails(Username,Pwd)
}

Page related java files (Includes all Methods by page wise,which is called by respective step definition files).    
public class login{
/**
Locators
**/
public void enterDetails(String Username,String Pwd){      
/**
steps
**/
}

Мой вопрос: можем ли мы включить методы в соответствующий файл определения страницы вместо создания отдельного файла java и сохранить все локаторы страниц в одном java файле

Feature File
Given User is on home screen

Step Definition file
@Given("^User is on home screen$")
public void User_is_on_home_screen(String Username,String Pwd)
{
 public void enterDetails(String Username,String Pwd){      
/**
steps
**/ 
}

Page Locators java file (Includes all page locators
public class Locators{
     /**
  All Locators
**/
}

Какой стандарт и эффективно?

1 Ответ

0 голосов
/ 20 февраля 2020

Да, вы можете использовать инъекцию зависимостей в огурец и внедрять классы объектов страницы в определение шага, используя зависимость

        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-core</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

Это будет выглядеть так:

public class BaseStep {

    private DeviceServiceImpl deviceService;
    private DashboardScreen dashboardScreen;
    public BaseStep() {
        this.deviceService = new DeviceServiceImpl(Hooks.driver);
        this.dashboardScreen = new DashboardScreen(Hooks.driver);
    }

    @Then("^I install application$")
    public void iInstallApplication() {
        dashboardScreen.scroll();
    }

    @Given("^I enable all network activity$")
    public void iEnableAllNetworkActivity() {

    }
}

В этом раз вы нашли все элементы на страницах:

/**
 * @author Tomash Gombosh
 */
public class DashboardScreen extends AbstractScreen {
    private static final AppElement SIGN_IN_BUTTON = new AppElement(
            "Sign in button",
            By.id(String.format("%s:%s", ApplicationProperties.ANDROID_APP_PACKAGE, "id/right_link")),
            ScrollTo.NO,
            true);
    private static final AppElement SIGN_UP_BUTTON = new AppElement(
            "Sign Up Button",
            By.id(String.format("%s:%s", ApplicationProperties.ANDROID_APP_PACKAGE, "id/sign_button")),
            ScrollTo.NO,
            true);

    public DashboardScreen(final AppiumDriver<MobileElement> driver) {
        super(driver);
    }

    @Override
    public boolean isDisplayed() {
        waitToBeVisible(SIGN_IN_BUTTON);
        scrollService.scrollDown();
        return allRequiredElementDisplayed();
    }

    public void tapLogin() {
        isDisplayed();
        tap(SIGN_IN_BUTTON);
    }

    public void tapSignIn() {
        tap(SIGN_UP_BUTTON);
    }

    public void scroll() {
        scrollService.scrollDown();
    }
}

Это было бы полезно для вас? Или нужно больше объяснений?

...