Cucamber Java Selenium pomoc z Page Object Model

0

Witam
Tworze projekt odnośnie automatyzacji testów i chciałbym doradzić się kogoś bardziej doświadczonego w technologiach Cucumber oraz wzorca Page Object Pattern.
W moim projekcie skorzystałem z wyżej wymienionego wzorca, strony mam zmapowane, kroki w cucamberze także zrobione elegancko.

Przykładowo chce zrobić test logowania w sklepie internetowym, posiadam :
-Zmapowane elementy ze strony logowania nazwijmy ją np : LoginPage
-Zmapowane elementy ze strony po zalogowaniu nazwijmy ja : HomePage

Moje kroki w cucamberze są generyczne tzn :
I am on the page "parametr"
I click button"parametr"
I wait for element "parametr"

Przykładowy test logowania będzie wyglądał tak :
I am on the page www.sklep.pl
I fill element "login" by text "mójLogin"
.... i tak dalej.

Mój problem pojawia się w momencie jak chce zrobić test w którym będę korzystał z kilku stron tzn z LoginPage oraz HomePage.
W jaki sposób w "javovej" metodzie ,która kryję się pod stepem cucamberowym mam wskazać w której klasie (LoginPage czy HomePage) należy szukać elementów?
Czy powinienem poprzedzać każdą zmianę stronę krokiem np :
I am on the page
i w tym kroku w jakiś sposób wskazywać w której klasie należy szukać zmapowanych elementów?

Z góry dziękuję za cierpliwość.
Pozdrawiam

0

czyli masz jakis plik .feature który jest implementowany w jakiejś definicji tak? coś takiego https://techyworks.blogspot.com/2016/10/cucumber-selenium3-java8.html?

0

Dokładnie tak.

Mam problem z przejściem stron.
Nie chce zrobić metody :
I click element "<parametr>" dla każdej klasy z elementami. Chciałbym żeby było to jak najbardziej generyczne.

0

przewznie sie spotykam z podejsciem np :public class LoginDef extends BasePage implements En"

  • En to sa te when given itp, np import cucumber.api.java8.En;
  • BasePage tam sie trzyma np LoginPage login = new Login Page. Nastepnie w definicji mozesz napisac login.nazwaMetodyKtórąWywołujesz

nie wiem czy nie uzylem zbyt duzo skrótów myślowych :D

0
m123 napisał(a):

przewznie sie spotykam z podejsciem np :public class LoginDef extends BasePage implements En"

  • En to sa te when given itp, np import cucumber.api.java8.En;
  • BasePage tam sie trzyma np LoginPage login = new Login Page. Nastepnie w definicji mozesz napisac login.nazwaMetodyKtórąWywołujesz

nie wiem czy nie uzylem zbyt duzo skrótów myślowych :D

Rozumiem ale chyba nie o to mi chodzi , bardziej zobrazuje co mam na myśli :
Mam klase
LoginPage z polem loginButton
HomePage z polem logoutButton

W cucamberze mam jeden step:

Click element " "

Test zalogowania i wylogowania wygląda następująco :
I click element "loginButton"
I click element "logoutButton"

Moje pytanie brzmi w jaki sposób zaimplementować w javie metode ,która jest pod tym stepem cucamberowym aby wiedziała w której klasie ma szukać elementu ,który wskazałem jako parametr.
Wydaję mi się ,że po pierwsze powienienm dodać stepy cucamberowe by wygladało to tak :

I am on the "LOGIN_PAGE"
I click element "loginButton"

I am on the "HOME_PAGE"
I click element "logoutButton"

W tych metodach wskazujących na strony powinno być wskazanie na klasy z których korzystać aby znaleźć element podany w parametrze ... to jest mój problem :)

0

a jakbys zrobil sobie interfejs z defaultowa metoda clickOnButtonWithText(String buttonName) i tam jakies szukanie po tekscie? jego oba buttony mają tagi button czy tam btn czy jeszcze cos innego to powinien po tekscie znalezc oba. Wtedy móglbys napisać przykładowo "When I click on "zapisz" button".

o to chodziło?

PS mozesz sobie zrobic takie interfejsy dla wspolnych elementow i miec interfejs dla buttonow, interfejs dla np kalendarza, interfejs dla dropdownów, itp itd (tak zeby to miało rynce i nogi). Nastepnie klasa z page objectami może sobie potrzebne interfejsy zaimplementować i korzystać u siebie. A najlepiej to pokaz gita :D

0

nie mam githuba, wrzucę kod tutaj

@Given("^I start from the website \"([^\"]*)\"$")
    public void iamOnThePage(String page) throws Throwable { 
        driver = Browser.launch();
        driver.navigate().to(page);
    }

    @When("^I click element  \"([^\"]*)\"$")
    public void clickElement(String element) throws Throwable {
    }

    @Then("^I am on the page \"([^\"]*)\"$")
    public void changePage(String page) throws Throwable {
        initPage(page);
    }
 public void initPage(String page) {

        if (page.equals("MAIN_PAGE")) {
            PageFactory.initElements(driver, MainPage.class);

        } else if (page.equals("REGISTERED_PAGE")) {
            PageFactory.initElements(driver, RegistrationPage.class);
        }
    }

W cucamberze mam nastęujące kroki :

Scenario: Registration testing

	Given I start from the website "MAIN_PAGE"
	When I click element  "SIGN_IN"
	Then I am on the page "REGISTERED_PAGE"
            When I click element "BACK"

Jak zaimplementować metody javove pod cucamberem (np When I click element) aby pobrała mi element z odpowiedniej klasy oraz jak go pobrać.
Elementy są zmapowane

0

widze ze korzystasz z page factory? moze ten link Ci pomoze https://www.guru99.com/page-object-model-pom-page-factory-in-selenium-ultimate-guide.html. page factory jest spoko ale z tym jest chyba wiecej roboty niz pozytku :(

0

Widziałem tą stronę - dzięki..
Mi zależy aby moje metody były jak najbardziej customowe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1