page object model selenium without using page factory
페이지 개체 모델 (POM)은 웹 요소에 대한 개체 저장소를 유지하기위한 디자인 패턴입니다. 이 자습서에서는 페이지 팩토리없이 Selenium에서 POM을 구현하는 방법을 설명합니다.
스크립팅 된 자동화 프로젝트는 최적화되고 이해하기 쉬운 방식으로 설계되어야합니다. 이는 프레임 워크를 설계하기 위해 특정 지침을 따르는 POM을 사용하여 달성됩니다.
다음에 대해 자세히 알아볼 것입니다.
- POM이란 무엇입니까?
- 프로젝트에서 POM 사용의 장점
- Page Factory 접근 방식을 사용하지 않고 기본 POM을 만드는 방법은 무엇입니까?
=> 독점적 인 Selenium 교육 자습서 시리즈를 보려면 여기를 방문하십시오.
학습 내용 :
페이지 팩토리가없는 페이지 개체 모델
페이지 개체 모델은 웹 요소에 대한 개체 저장소를 유지 관리하는 데 사용되는 디자인 패턴입니다. 여기에서 모든 웹 요소 및 해당 메서드는 각 웹 페이지에 대해 별도의 클래스에서 유지됩니다. 따라서 WebElement의 속성을 한 번만 변경해도 사용되는 모든 테스트 케이스에 반영됩니다. 이러한 방식으로 더 쉬운 Object Repository 유지 관리가 향상됩니다.
페이지 개체 모델은 여러 페이지 또는 상태가있는 응용 프로그램에 사용할 때 가장 적합합니다.
비디오 자습서는 다음과 같습니다.
파트 I
파트 II
.net 인터뷰 질문 및 답변
POM의 장점
다음은 POM의 몇 가지 장점입니다.
- 코드를 유지하는 것이 더 쉽습니다. 모든 사용자 인터페이스 변경 사항은 클래스에서 사용되는 모든 위치를 반영합니다.
- 견고하고 코드를 읽기 쉽게 만듭니다 (메소드에는 더 현실적인 이름이 있음).
- 코드를 재사용 가능하게 만들고 코드 중복을 줄입니다 (객체 저장소는 테스트 사례와 무관 함).
- 코드가 줄어들고 최적화됩니다.
페이지 팩토리 모델없이 POM을 만드는 단계
#1) 애플리케이션의 모든 페이지에 대해 Java 클래스를 만듭니다.
#두) 각 클래스에서 모든 웹 요소를 변수로 선언하십시오.
#삼) 변수에 작용하는 해당 메서드를 구현합니다.
디자인 패턴은 2 개의 레이어 / 패키지를 사용하여 구성 할 수 있습니다.
- 페이지 레이어 애플리케이션의 페이지를 개별 Java 클래스로 보유합니다. 각 클래스에는 WebElements가 변수로 선언되고 메서드로 수행되는 작업이 있습니다.
- 테스트 레이어 응용 프로그램의 테스트 케이스 및 검증 부분을 보유합니다.
간단한 시나리오의 예를 들어 보겠습니다.
- 애플리케이션의 URL을 엽니 다.
- 이메일 주소와 비밀번호 데이터를 입력합니다.
- 로그인 버튼을 클릭하십시오.
- 검색 페이지에서 성공적인 로그인 메시지를 확인하십시오.
페이지 레이어
여기에 2 페이지가 있습니다.
- 홈페이지 : URL을 입력하면 페이지가 열리고 로그인 데이터를 입력합니다.
- SearchPage : 로그인 성공 후 표시되는 페이지입니다.
페이지 계층에서 웹 애플리케이션의 각 페이지는 별도의 Java 클래스로 선언되며 해당 위치 지정자 및 조치가 여기에 언급됩니다.
실시간 예제를 사용하여 POM을 만드는 단계
# 1) 각 페이지에 대한 Java 클래스를 만듭니다.
이것에 예 , '홈'및 '검색'페이지 2 개에 액세스합니다. 따라서 페이지 계층 (또는 com.automation.pages와 같은 패키지)에 2 개의 Java 클래스를 생성합니다.
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) WebElements를 변수로 생성 :
우리는 다음과 상호 작용할 것입니다.
- 홈페이지의 이메일, 비밀번호, 로그인 버튼 필드.
- SearchPage의 성공적인 메시지입니다.
따라서 'By'클래스를 사용하여 WebElement를 변수로 생성합니다.
예를 들면 : 이메일에 xpath가 // div (contains (@id,‘EmailId’)), 그 변수 선언은
// EmailId 필드의 로케이터
By EmailAddress = By.xpath (// div (contains (@id,‘EmailId ')))
# 3) WebElements에서 수행되는 작업에 대한 메서드를 만듭니다.
WebElements에서 다음 작업이 수행됩니다.
자바 배열 끝에 추가
- EmailAddress 필드에 action을 입력하십시오.
- 암호 필드에 action을 입력하십시오.
- 로그인 버튼에서 작업을 클릭합니다.
예를 들어, WebElement의 각 작업에 대해 다음과 같이 사용자 정의 메서드가 생성됩니다.
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
여기서 Id는 기본 테스트 케이스에서 사용자가 입력을 보내므로 메서드의 매개 변수로 전달됩니다.
노트 :테스트 계층의 Main 클래스에서 드라이버 인스턴스를 가져 오려면 페이지 계층의 각 클래스에 대해 생성자를 만들어야합니다.
여기서는 드라이버를 시작하지 않고 페이지 계층 클래스의 개체가 생성 될 때 기본 클래스에서 해당 인스턴스를받습니다.
다음과 같이 각 페이지에 대해 두 개의 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 클래스 (MainClass.java)를 만듭니다.
테스트 케이스를 만드는 단계 :
- 드라이버를 초기화하고 응용 프로그램을 엽니 다.
- 각 웹 페이지에 대해 PageLayer 클래스의 개체를 만들고 드라이버 인스턴스를 매개 변수로 전달합니다.
- 생성 된 객체를 사용하여 페이지 레이어 클래스 (각 웹 페이지에 대해)의 메소드를 호출하여 작업 / 확인을 수행합니다.
- 모든 작업이 수행 될 때까지 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(); } }
결론
이 자습서에서는 페이지 개체 모델의 장점과 Selenium에서 Page Factory를 사용하지 않고 기본 POM 디자인 패턴을 만드는 방법을 설명했습니다.
다음 자습서에서는 POM의 또 다른 접근 방식, 즉 Page Factory 접근 방식을 사용하는 방법에 대해 설명합니다.
=> 여기에서 모든 Selenium 자습서를 확인하십시오.
추천 도서
- 페이지 팩토리를 사용하는 페이지 개체 모델 (POM) | Selenium 튜토리얼
- 나선형 모델-SDLC 나선형 모델이란?
- Cucumber Selenium 튜토리얼 : Cucumber Java Selenium WebDriver 통합
- 웹 페이지에서 드롭 다운 요소를 처리하기위한 Selenium Select 클래스 사용 – Selenium Tutorial # 13
- Selenium WebDriver 소개 – Selenium Tutorial # 8
- ChromeDriver Selenium 자습서 : Chrome에서 Selenium Webdriver 테스트
- 30 개 이상의 최고의 셀레늄 튜토리얼 : 실제 예제로 셀레늄 배우기
- Selenium 전문가를위한 파트 타임 프리랜서 채용 기회