page object model selenium without using page factory
Model obiektu strony (POM) to wzorzec projektowy do utrzymywania repozytorium obiektów dla elementów sieci Web. Ten samouczek wyjaśnia, jak zaimplementować POM w selenie bez fabryki stron:
Projekt automatyzacji oparty na skryptach musi być zaprojektowany w taki sposób, aby był zoptymalizowany i łatwiejszy do zrozumienia. Osiąga się to za pomocą POM, który spełnia określone wytyczne dotyczące projektowania szkieletu.
Dowiemy się więcej o:
- Co to jest POM?
- Zalety wykorzystania POM w projekcie
- Jak stworzyć podstawowy POM bez użycia podejścia Page Factory?
=> Odwiedź tutaj, aby zapoznać się z ekskluzywną serią samouczków szkoleniowych dotyczących selenu.
Czego się nauczysz:
Model obiektu strony bez fabryki stron
Page Object Model to wzorzec projektowy używany do utrzymywania repozytorium obiektów dla elementów sieci Web. Tutaj wszystkie elementy sieci Web i odpowiadające im metody są utrzymywane w osobnej klasie dla każdej strony internetowej. Dlatego nawet pojedyncza zmiana atrybutu elementu WebElement będzie miała odzwierciedlenie we wszystkich przypadkach testowych, niezależnie od tego, gdzie jest używany. W ten sposób ułatwia obsługę repozytorium obiektów.
Model obiektów strony jest najlepszy w przypadku aplikacji, które mają wiele stron lub stanów.
Oto samouczki wideo:
Część I.
część druga
Zalety POM
Poniżej podano kilka zalet POM:
- Łatwiej jest utrzymać kod. Wszelkie zmiany w interfejsie użytkownika będą odzwierciedlane wszędzie tam, gdzie jest on używany w klasie.
- Solidny i sprawia, że kod jest czytelny (metody mają bardziej realistyczne nazwy).
- Umożliwia wielokrotne wykorzystanie kodu i ogranicza jego duplikację (repozytorium obiektów jest niezależne od przypadków testowych).
- Kod staje się mniejszy i zoptymalizowany.
Kroki, aby utworzyć model fabryczny POM bez strony
# 1) Utwórz klasę Java dla każdej strony w aplikacji.
#dwa) W każdej klasie zadeklaruj wszystkie elementy sieci Web jako zmienne.
# 3) Zaimplementuj odpowiednie metody działające na zmienne.
Wzorzec projektowy może być zbudowany z 2 warstw / pakietów:
- Warstwa strony będzie przechowywać strony aplikacji jako oddzielną klasę Java. Każda klasa będzie miała zadeklarowane elementy WebElements jako zmienne oraz akcje wykonywane jako metody.
- Warstwa testowa będzie zawierał przypadki testowe aplikacji i jej część weryfikacyjną.
Weźmy przykład prostego scenariusza:
- Otwórz adres URL aplikacji.
- Wpisz adres e-mail i hasło.
- Kliknij przycisk Zaloguj.
- Potwierdź pomyślny komunikat logowania na stronie wyszukiwania.
Warstwa strony
Tutaj mamy 2 strony,
- Strona główna : Strona otwiera się po wprowadzeniu adresu URL i tutaj podajemy dane do logowania.
- SearchPage : Strona wyświetlana po pomyślnym zalogowaniu.
W warstwie strony każda strona w aplikacji internetowej jest deklarowana jako oddzielna klasa Java, a jej lokalizatory i akcje są tam wymienione.
Kroki tworzenia POM z przykładami w czasie rzeczywistym
# 1) Utwórz klasę Java dla każdej strony:
W tym przykład , uzyskamy dostęp do 2 stron internetowych: „Strona główna” i „Szukaj”. Dlatego utworzymy 2 klasy Java w warstwie strony (lub w pakiecie, powiedzmy, com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Utwórz WebElements jako zmienne:
jakie są fazy sdlc?
Będziemy wchodzić w interakcje z:
- Adres e-mail, hasło, pole przycisku logowania na stronie głównej.
- Pomyślna wiadomość na stronie wyszukiwania.
Dlatego utworzymy elementy WebElements jako zmienne za pomocą klasy „By”.
Na przykład: Jeśli e-mail ma xpath jako // div (zawiera (@id, „EmailId”)), to deklaracja zmiennej to
// Lokalizator pola EmailId
Przez EmailAddress = By.xpath (// div (zawiera (@id, ‘EmailId’)))
# 3) Utwórz metody dla akcji wykonywanych na WebElements:
Poniższe czynności są wykonywane na WebElements:
- Wpisz akcję w polu EmailAddress.
- Wpisz akcję w polu Hasło.
- Kliknij akcję na przycisku Zaloguj.
Na przykład, Metody zdefiniowane przez użytkownika są tworzone dla każdej akcji w WebElement jako,
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
W tym przypadku Id jest przekazywany jako parametr w metodzie, ponieważ dane wejściowe zostaną przesłane przez użytkownika z głównego przypadku testowego.
Uwaga :Aby pobrać instancję sterownika z klasy głównej w warstwie testowej, dla każdej klasy w warstwie strony należy utworzyć konstruktora.
Nie inicjujemy tutaj sterownika, raczej jego instancja jest odbierana z klasy głównej podczas tworzenia obiektu klasy Page Layer.
Dla każdej strony tworzone są dwie klasy Java, jak pokazano poniżej:
HomePage.java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class HomePage { WebDriver driver; // Locator for Email Address By EmailAddress = By.xpath('//div(contains(@id,'Emaild'))'); // Locator for Password field By Password= By.xpath('//div(contains(@id,'Password'))'); // Locator for SignIn Button By SignInButton= By.xpath('//div(contains(@id,'SignInButton'))'); // Method to type EmailId public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) } // Method to type Password public void typePassword(String PasswordValue){ driver.findElement(Password).sendKeys(PasswordValue) } // Method to click SignIn Button public void clickSignIn(){ driver.findElement(SignInButton).click() } // Constructor // Gets called when object of this page is created in MainClass.java public HomePage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver; }
SearchPage.Java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class SearchPage{ WebDriver driver; // Locator for Success Message By SuccessMessage= By.xpath('//div(contains(@id,'Message'))'); // Method that return True or False depending on whether the message is displayed public Boolean MessageDisplayed(){ Boolean status = driver.findElement(SuccessMessage).isDisplayed(); return status; } // Constructor // This constructor is invoked when object of this page is created in MainClass.java public SearchPage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver;
Warstwa testowa
Przypadki testowe są zaimplementowane w tej klasie.
Tworzymy osobny pakiet, powiedzmy com.automation.test, a następnie tworzymy tutaj klasę Java (MainClass.java).
Kroki tworzenia przypadków testowych:
- Zainicjuj sterownik i otwórz aplikację.
- Utwórz obiekt klasy PageLayer (dla każdej strony internetowej) i przekaż instancję sterownika jako parametr.
- Korzystając z utworzonego obiektu, wywołaj metody z klasy PageLayer (dla każdej strony internetowej) w celu wykonania akcji / weryfikacji.
- Powtarzaj krok 3, aż wszystkie czynności zostaną wykonane, a następnie zamknij sterownik.
//package com.automation.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MainClass { public static void main(String() args) { System.setProperty('webdriver.chrome.driver','./exefiles/chromedriver.exe'); WebDriver driver= new ChromeDriver(); driver.manage().window().maximize(); driver.get('URL mentioned here'); // Creating object of HomePage and driver instance is passed as parameter to constructor of Homepage.Java HomePage homePage= new HomePage(driver); // Type EmailAddress homePage.typeEmailId('abc@ymail.com'); // EmailId value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Type Password Value homePage.typePassword('password123'); // Password value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Click on SignIn Button homePage.clickSignIn(); // Creating an object of LoginPage and driver instance is passed as parameter to constructor of SearchPage.Java SearchPage searchPage= new SearchPage(driver); //Verify that Success Message is displayed Assert.assertTrue(searchPage.MessageDisplayed()); //Quit browser driver.quit(); } }
Wniosek
W tym samouczku wyjaśniono zalety Page Object Model i jak utworzyć podstawowy wzorzec projektowy POM bez używania Page Factory w Selenium.
W nadchodzącym samouczku omówimy jeszcze inne podejście POM, czyli użycie podejścia Page Factory.
=> Sprawdź WSZYSTKIE samouczki dotyczące Selenium tutaj.
rekomendowane lektury
- Model obiektu strony (POM) z fabryką stron | Samouczek dotyczący selenu
- Model spiralny - Co to jest model spiralny SDLC?
- Cucumber Selenium Tutorial: Integracja Cucumber Java Selenium WebDriver
- Wykorzystanie klasy Selenium Select do obsługi elementów rozwijanych na stronie internetowej - Samouczek Selenium nr 13
- Wprowadzenie do Selenium WebDriver - samouczek Selenium # 8
- Samouczek Selenium ChromeDriver: Testy Selenium Webdriver w przeglądarce Chrome
- 30+ najlepszych samouczków dotyczących selenu: naucz się selenu z prawdziwymi przykładami
- Możliwość pracy w niepełnym wymiarze godzin jako freelancer dla ekspertów Selenium