page object model selenium without using page factory
Модел на обект на страница (POM) е шаблон за дизайн за поддържане на хранилището на обекти за уеб елементи. Този урок обяснява как да внедрите POM в селен без фабрична страница:
Проектът за автоматизация по сценарий трябва да бъде проектиран по такъв начин, че да бъде оптимизиран и по-лесен за разбиране. Това се постига с помощта на POM, който следва определени насоки за проектиране на рамка.
Ще научим повече за:
- Какво е POM?
- Предимства на използването на POM в проект
- Как да създам основен POM, без да използвам Page Factory подход?
=> Посетете тук за ексклузивната поредица за обучение по селен.
Какво ще научите:
Модел на обект на страница без фабрика на страници
Page Object Model е модел на проектиране, който се използва за поддържане на хранилището на обекти за уеб елементите. Тук всички уеб елементи и съответните им методи се поддържат в отделен клас за всяка уеб страница. Следователно, дори една промяна в атрибута на WebElement ще се отрази във всички тестови случаи, където и да се използва. По този начин подобрява поддръжката на хранилището на обекти.
Page Objects Model е най-добър, когато се използва за приложения, които имат множество страници или състояния.
Ето видео уроците:
Част I
Част II
Предимства на POM
По-долу са дадени няколко предимства на POM:
- По-лесно е да поддържате кода. Всички промени в потребителския интерфейс ще се отразят навсякъде, където се използват в класа.
- Здрав и прави кода четим (Методите имат по-реалистични имена).
- Прави кода за многократна употреба и намалява дублирането на код (хранилището на обекти е независимо от тестовите случаи).
- Кодът става по-малко и оптимизиран.
Стъпки за създаване на POM без фабричен модел на страница
# 1) Създайте Java клас за всяка страница в приложението.
# две) Във всеки клас декларирайте всички уеб елементи като променливи.
# 3) Внедрете съответните методи, действащи върху променливите.
Моделът на дизайна може да бъде структуриран с помощта на 2 слоя / пакета:
- Страничен слой ще държи страниците на приложението като индивидуален Java клас. Всеки клас ще има WebElements декларирани като променливи и действията, които се изпълняват като методи.
- Тестов слой ще проведе тестовите случаи на приложението и неговата част за проверка.
Нека вземем пример за прост сценарий:
- Отворете URL адреса на приложение.
- Въведете имейл адреса и данните за парола.
- Щракнете върху бутона Вход.
- Проверете успешното съобщение за вход на страницата за търсене.
Страничен слой
Тук имаме 2 страници,
- Начална страница : Страницата се отваря при въвеждане на URL адреса и тук въвеждаме данните за влизане.
- SearchPage : Страница, която се показва след успешно влизане.
В слоя Page всяка страница в уеб приложението се декларира като отделен Java клас и там се споменават неговите локатори и действия.
Стъпки за създаване на POM с примери в реално време
# 1) Създайте Java клас за всяка страница:
В това пример , ще имаме достъп до 2 уеб страници, страници „Начало“ и „Търсене“. Следователно, ние ще създадем 2 Java класа в Page Layer (или в даден пакет, com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Създайте WebElements като променливи:
алфа и бета тестване в софтуерното инженерство
Бихме взаимодействали с:
- Имейл, парола, поле за бутон за вход на началната страница.
- Успешно съобщение в SearchPage.
Така че ние ще създадем WebElements като променливи, използвайки ‘By’ Class.
Например: Ако имейл има xpath като // div (съдържа (@id, ‘EmailId’)), тогава декларацията му за променлива е
// Поле Locator за EmailId
Чрез EmailAddress = By.xpath (// div (съдържа (@id, ‘EmailId’)))
# 3) Създайте методи за действия, извършени в WebElements:
По-долу се извършват действия на WebElements:
- Въведете действие в полето EmailAddress.
- Въведете действие в полето Парола.
- Щракнете върху действие върху бутона за вход.
Например, Потребителски дефинирани методи се създават за всяко действие в WebElement като,
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Тук Id се предава като параметър в метода, тъй като входът ще бъде изпратен от потребителя от основния тестов случай.
Забележка :Трябва да се създаде конструктор за всеки клас в слоя страница, за да се получи екземпляр на драйвера от основния клас в тестовия слой.
Тук не инициираме драйвера, а по-скоро неговият екземпляр се получава от основния клас, когато се създава обектът от класа на слоя страница.
За всяка страница се създават два Java класа, както е показано по-долу:
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;
Тестов слой
В този клас са приложени тестови случаи.
Създаваме отделен пакет, например com.automation.test и след това създаваме Java Class тук (MainClass.java).
Стъпки за създаване на тестови случаи:
- Инициализирайте драйвера и отворете приложението.
- Създайте обект от PageLayer Class (за всяка уеб страница) и предайте екземпляра на драйвера като параметър.
- Използвайки създадения обект, извикайте методите в PageLayer Class (за всяка уеб страница), за да извършите действия / проверка.
- Повторете стъпка 3, докато се извършат всички действия и след това затворете драйвера.
//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(); } }
Заключение
Този урок обясни предимствата на Page Object Model и как да създадете основен модел на POM дизайн, без да използвате Page Factory в Selenium.
В предстоящия урок ще обсъдим още един подход на POM, тоест използването на подхода Page Factory.
=> Проверете ВСИЧКИ уроци за селен тук.
Препоръчително четене
- Модел на обект на страница (POM) с фабрика на страници | Урок за селен
- Спирален модел - Какво е SDLC спирален модел?
- Урок за краставици селен: Интеграция на краставица Java Selenium WebDriver
- Използване на Selenium Select Class за работа с падащи елементи на уеб страница - Урок № 13 за Selenium
- Въведение в Selenium WebDriver - Урок № 8 за селен
- Урок за ChromeDriver Selenium: Тестове на Selenium Webdriver в Chrome
- 30+ най-добри урока за селен: Научете селен с реални примери
- Възможност за работа на свободна практика на непълно работно време за експерти по селен