Skrypt testowy: Logowanie do konta (Page Object Model)

 

Jakiś czas temu w jednym z wpisów, pokazałem jak stworzyć test automatyczny, który sprawdza funkcjonalność logowania do konta. Skrypt był napisany bez zachowania jakiegokolwiek modelu obiektowego – został napisany w jednej klasie, gdyż zależało mi na skupieni waszej uwagi na samych instrukcjach/operacjach Selenium, niż na całej architekturze kodu i projektu. Dzisiaj stworzymy skrypt z dokładnie taką samą funkcjonalnością – czyli test sprawdzający logowanie do danego konta, ale przedstawię go w ujęci Page Object Model.

Scenariusz testu:

  1. Wejdź na główna stronę:  http://automationpractice.com
  2. Zweryfikuj tytuł strony (prawidłowy tytuł strony to: „My Store„)
  3. Przejdź na stronę logowania – w tym celu kliknij przycisk „Sign In
  4. W pole „Email address” wpisz login (poprawny login to: „login@test.pl„)
  5. W pole „Password” wpisz hasło (poprawne hasło to: „Password„)
  6. Kliknij przycisk Sign in
  7. Sprawdź czy wyświetlane imię i nazwisko właściciela konta są poprawne (poprane dane właściciela konta to: „Tomasz Stelmach”)

Na początku stworzymy klasę o nazwie MainPage, która będzie reprezentowała główną witrynę:  http://automationpractice.com. W tym miejscu zlokalizujemy element „Sign in”, który przeniesie nas na na stronę logowania, oraz pobierzemy tytuł strony głównej, w celu późniejszej weryfikacji.

 

package Pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;


        public class MainPage {

            private WebDriver driver;

            private By signButton = By.linkText("Sign in");

            public MainPage (WebDriver driver)
            {
                this.driver = driver;
            }

            public String getTitle()
            {
                String title = driver.getTitle();
                return title;
            }

            public void clickSignIn()
            {
                driver.findElement(signButton).click();
            }

        }

 

 

Dokładne omówienie klasy MainPage:

Deklarujemy prywatny obiekt driver oraz tworzymy konstruktor klasy MainPage

 

 

Następnie lokalizujemy niezbędny do przeprowadzania testu WebElement na tej stronie. Potrzebujemy zlokalizować element”‚Sign in”, który po kliknięciu przenosi nas na ekran logowania. Warto zwrócić uwagę, że nasz WebElement ma przedrostek private co oznacza, że jest prywatny, czyli będzie widoczny tylko w tej klasie i w żadnej innej. My jednak będziemy chcieli korzystać z tego elementu w innych klasach, wiec musimy utworzyć metodę, która będzie działać w oparciu o ten WebElement i będzie klasą publiczną, czyli będzie widoczna również dla innych klas naszego projektu.

 

 

Następnie tworzymy publiczną metodę getTitle(), która będzie pobierać oraz zwracać w postaci tekstowej – tytuł strony. Wykorzystując tę metodę w naszym teście – mamy możliwość upewnienia się, czy znajdujemy się na właściwej stronie – poprzez porównanie zwróconego tytułu strony z właściwym. Do późniejszej operacji porównania, użyjemy Asercji.

 

 

Na końcu widzimy metodę clickSignIn(), której zadaniem jest klikniecie w element ‚Sign in’ w efekcie czego przeniesiemy się na stronę logowania.

 

 

Kolejna klasa to LoginPage – reprezentuje ona stronę logowania. W tym miejscu zlokalizujemy niezbędne do przeprowadzenia testu elementy: pole „Email address”, pole „Password”, przycisk „Sign in”. Pobierzemy również imię i nazwisko osoby do której należy konto, po to aby sprawdzić czy faktycznie zalogowaliśmy się do prawidłowego konta.

 

 

package Pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;


        public class LoginPage {

            private WebDriver driver;

            private By login = By.id("email");
            private By password = By.id("passwd");
            private By sumbit = By.id("SubmitLogin");
            private By ownerName = By.xpath(".//*[@id='header']/div[2]/div/div/nav/div[1]/a/span");


            public LoginPage(WebDriver driver)
            {
                this.driver = driver;
            }


            public void setLogin(String strLogin)
            {
                driver.findElement(login).clear();
                driver.findElement(login).sendKeys(strLogin);
            }

            public void setPassword (String strPassword)
            {
                driver.findElement(password).clear();
                driver.findElement(password).sendKeys(strPassword);
            }

            public void clickLogIn()
            {
                driver.findElement(sumbit).click();
            }

            public String getOwnerName()
            {
                String strOwnerName =  driver.findElement(ownerName).getText();
                return strOwnerName;

            }


            public void loginTo(String strLogin , String strPassword)
            {
                this.setLogin(strLogin);
                this.setPassword(strPassword);
                this.clickLogIn();

            }

        }

 

Niektóre części kodu są analogiczne do poprzednio opisywanej klasy, więc skupie się na opisaniu tylko nowych istotnych dla testu operacji.

Metoda setLogin() – jej zadaniem jest wyczyszczenie pola „Email address” z ewentualnej ,istniejącej wartości oraz wprowadzenie nowej wartości tekstowej – będziemy wprowadza tutaj nasz login.

 

 

Następna metoda to setPassword() – analogicznie do opisanej wyżej metody setLogin() – metoda ta czyści pole z ewentualnej wartości oraz wprowadza podaną przez nas wartość tekstową – wprowadzimy tutaj nasze hasło.

 

 

clickLogiIn() – metoda to realizuje klikniecie w element „Sign in” – który potwierdza wpisane dane do pola „Email address” oraz  „Password” oraz wysyła żądanie logowania na serwer – jeśli dane się zgadzają, wówczas zostajemy zalogowani do konta.

 

 

getOwnerName() – za pomocą tego bloku kodu – pobieramy i zwracamy imię i nazwisko właściciela konta. Będziemy jej używać, podczas sprawdzania za pomocą asercji czy zalogowaliśmy się na poprawne konto.

 

 

Ostatnia metodą jest loginTo() – metoda to korzysta z wcześniej utworzonych metod i niejako zbiera je w całą funkcjonalność logowania. Uruchamiając tę metodę tak naprawdę uruchomimy po kolei metodę setLogin() – wpiszemy login, metodę setPassword() – wpiszemy hasło oraz clickLogiIn() – czyli klikniemy w przycisk wysyłki formularza. Moglibyśmy równie dobrze, odpalać te metody osobno bez konieczności tworzenia omawianej  metody loginTo(), ale w ten sposób kod staje się łatwiejszy w zrozumieniu i krótszy.

 

 

Pora na klasę testową:

package testackage;

import Pages.MainPage;
import Pages.LoginPage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import java.util.concurrent.TimeUnit;

        public class LogInTest {

            private WebDriver driver;

            LoginPage lp;
            MainPage mp;


            @BeforeTest

            public void setup()
            {
                System.setProperty("webdriver.chrome.driver", "C:\\Users\\Tomasz\\Documents\\seleniumChromeDriver\\chromedriver.exe");
                driver = new ChromeDriver();
                driver.get("http://automationpractice.com");
                driver.manage().window().maximize();
                driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            }

            @AfterTest

            public void tearDown()
            {
                driver.quit();
            }



            @Test (priority = 0)

            public void testLoginPage() {

                mp = new MainPage(driver);

                Assert.assertEquals(mp.getTitle(),"My Store");

                mp.clickSignIn();

                lp = new Pages.LoginPage(driver);


                lp.loginTo("login@test.pl","password");

                Assert.assertTrue(lp.getOwnerName().contains("Tomasz Stelmach"));


            }
        }

 

 

 

Dokładny opis klasy LogInTest

Tworzymy obiekty klasy LoginPage oraz MainPage.

 

Za pomocą asercji, porównujemy pobrany tytuł strony z prawidłowym, podanym w scenariuszu tytułem. Dzięki tej instrukcji uzyskujemy pewność, że znajdujemy się na właściwej, oczekiwanej stronie www.

 

Dla obiektu mp wywołujemy metodę clickSignIn() – dzięki której klikamy na „Sign In” i przenosimy się na stronę logowania.

 

Wywołujemy metodę loginTo() z dwoma parametrami w postaci stringów. Pierwszy parametr to nasz login, drugi to hasło.  Metoda loginTo() – pierwszy parametr przekazuje do znajdującej się w środku metody setLogin(), natomiast drugi do metody setPassword(). Na koniec zostaje jeszcze uruchomiona metoda clickLogiIn() – która wysyła nasze żądanie logowania. Jeśli dane logowania są prawidłowe, wówczas zostajemy zalogowani do konta.

 

Po zalogowaniu  pozostaje nam tylko sprawdzić, czy jesteśmy zalogowani na właściwe konto. W tym celu przeprowadzamy asercję, która sprawdzamy czy pobrane ze strony dane właściciela konta, zawierają poprawne imię i nazwisko podane w scenariuszu: „Tomasz Stelmach” 

4 myśli na “Skrypt testowy: Logowanie do konta (Page Object Model)”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *