Open In App

Page Object Model (POM)

What is POM?
POM is a design pattern which is commonly used in Selenium for Automating the Test Cases. This design pattern can be used with any kind of framework like keyword-driven, Data-driven, hybrid framework, etc.
The Page object is an object-oriented class which acts as an interface for the page of your Application under test. Page class contains web elements and methods to interact with web elements. While Automating the test cases, we create the object of these Page Classes and interact with web elements by calling the methods of these classes.

Page Object Model Design Pattern



Uses of Page Object Model (POM):
This Design Pattern is used in Selenium where web pages are represented by a corresponding class and web elements are represented by the variables of the class and all interactions are possible through the methods or say functions of the class.

Advantages of POM model:



Implementation of Page Object Model:
Here I’m taking the example of Gmail application to show the implementation of POM.
The Project Hierarchy of my Maven Project is shown below:

Project Hierarchy

TestBase Class:
In this class we create the object of WebDriver class, maximize the browser, launching Url etc.




package test_cases;
  
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
  
public class TestBase {
  
    public static WebDriver driver = null;
  
    @BeforeSuite
    public void initialize() throws IOException {
  
        System.setProperty("webdriver.chrome.driver",
        System.getProperty("user.dir") + 
            "\\src\\test\\java\\drivers\\chromedriver.exe");
    
        driver = new ChromeDriver();
    
        // To maximize browser
        driver.manage().window().maximize();
    
        // Implicit wait
        driver.manage().timeouts().implicitlyWait(
             10, TimeUnit.SECONDS);
    
        // To open Gmail site
        driver.get("https:// www.gmail.com");
    }
  
    @AfterSuite
    // Test cleanup
    public void TeardownTest() {
        TestBase.driver.quit();
    }
}

GmailLoginPage Class:
In this class, we identify the web elements of Gmail Login Page and methods to interact with these web elements.




package pages;
  
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
  
public class GmailLoginPage {
  
    WebDriver driver;
  
    public GmailLoginPage(WebDriver driver) {
        this.driver = driver;
    }
  
    // Using FindBy for locating elements
    @FindBy(how = How.XPATH, using = 
            "// input[@type='email']]")
    WebElement emailTextBox;
  
    @FindBy(how = How.XPATH, using = 
            "// input[@type='password']")
      
    WebElement passwordTextBox;
    @FindBy(how = How.XPATH, using =
            "// div[@role = 'button' and @id  =
            'identifierNext']")
    WebElement nextButton;
  
    // Defining all the user actions (Methods)
    //that can be performed in the Facebook home page
  
    // This method is to set Email in the email text box
    public void setEmail(String strEmail) {
            emailTextBox.sendKeys(strEmail);
        }
        // This method is to set Password in the password text box
    public void setPassword(String strPassword) {
            passwordTextBox.sendKeys(strPassword);
        }
        // This method is to click on Next Button
    public void clickOnNextButton() {
        nextButton.click();
    }
}

Similarly, we write the code for Gmail Home Page.

GmailLoginTest:
In this class we test the login page of Gmail.




package test_cases;
  
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.Test;
import pages.GmailHomePage;
import pages.GmailLoginPage;
  
public class GmailLoginTest extends TestBase {
  
    @Test
    public void init() throws Exception {
  
        // driver.get("https:// www.gmail.com");
        GmailLoginPage loginpage = 
           PageFactory.initElements(driver,
           GmailLoginPage.class);
    
        loginpage.setEmail("abc@gmail.com");
        loginpage.clickOnNextButton();
        loginpage.setPassword("23456@qwe");
        loginpage.clickOnNextButton();
    }
}


Article Tags :