Www Guru99 Com

* The preview only display some random pages of manuals. You can download full content via the form below.

The preview is being generated... Please wait a moment!
  • Submitted by:
  • File size: 1.3 MB
  • File type: application/pdf
  • Words: 1,667
  • Pages: 14
Report / DMCA this file Add to bookmark

Description

Page Object Model (POM) & Page Factory in Selenium: Ultimate Guide Before we learn about Page Object Model, lets understand Why POM ? Starting a UI Automation in Selenium WebDriver is NOT a tough task. You just need to find elements, perform operations on it . Consider this simple script to login into a website

As you can observe, all we are doing is finding elements and filling values for those elements. This is a small script. Script maintenance looks easy. But with time test suite will grow. As you add more and more lines to your code, things become tough. The chief problem with script maintenance is that if 10 different scripts are using the same page element, with any change in that element, you need to change all 10 scripts. This is time consuming and error prone. A better approach to script maintenance is to create a separate class file which would find web elements , fill them or verify them. This class can be reused in all the scripts using that element. In future if there is change in the web element , we need to make change in just 1 class file and not 10 different scripts. This approach is called Page Object Model(POM). It helps make code more readable, maintainable, and reusable.

What is POM? converted by Web2PDFConvert.com

Page Object Model is a design pattern to create Object Repository for web UI elements. Under this model, for each web page in the application there should be corresponding page class. This Page class will find the WebElements of that web page and also contains Page methods which perform operations on those WebElements. Name of these methods should be given as per the task they are performing i.e., if a loader is waiting for payment gateway to be appear, POM method name can be waitForPaymentScreenDisplay().

Advantages of POM 1. Page Object Patten says operations and flows in the UI should be separated from verification. This concept makes our code cleaner and easy to understand. 2. Second benefit is the object repository is independent of testcases, so we can use the same object repository for a different purpose with different tools. For example, we can integrate POM with TestNG/JUnit for functional testing and at the same time with JBehave/Cucumber for acceptance testing. 3. Code becomes less and optimized because of the reusable page methods in the POM classes. 4. Methods get more realistic names which can be easily mapped with the operation happening in UI. i.e. if after clicking on the button we land on the home page, the method name will be like 'gotoHomePage()'.

How to implement POM ? Simple POM: It's the basic structure of Page object model (POM) where all Web Elements of the AUT and the method that operate on these Web Elements are maintained inside a class file. Task like verification should be separate as part of Test methods.

Complete Example TestCase: Go to Guru99 Demo Site .

converted by Web2PDFConvert.com

Web Load Testing Tool Easy, Realistic tests in 10 minutes Download Free Edition Now

Step 1) Go to Guru99 Demo Site

Step 2) In home page check text "Guru99 Bank" is present

Step 3) Login into application

Step 4) Verify that the Home page contains text as "Manger Id : demo"

Here are we are dealing with 2 pages 1. Login Page 2. Home Page (shown once you login) Accordingly we create 2 POM classes Guru99 Login page POM package pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class Guru99Login {

converted by Web2PDFConvert.com

WebDriver driver; By user99GuruName = By.name("uid"); By password99Guru = By.name("password"); By titleText =By.className("barone"); By login = By.name("btnLogin");

public Guru99Login(WebDriver driver){ this.driver = driver; } //Set user name in textbox public void setUserName(String strUserName){ driver.findElement(user99GuruName).sendKeys(strUserName);; }

//Set password in password textbox public void setPassword(String strPassword){ driver.findElement(password99Guru).sendKeys(strPassword); }

//Click on login button public void clickLogin(){ driver.findElement(login).click(); }

//Get the title of Login Page public String getLoginTitle(){ return driver.findElement(titleText).getText(); } /** * This POM method will be exposed in test case to login in the application * @param strUserName * @param strPasword * @return */ converted by Web2PDFConvert.com

public void loginToGuru99(String strUserName,String strPasword){ //Fill user name this.setUserName(strUserName); //Fill password this.setPassword(strPasword); //Click Login button this.clickLogin();

} }

Guru99 Home Page POM package pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class Guru99HomePage { WebDriver driver; By homePageUserName = By.xpath("//table//tr[@class='heading3']");

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

//Get the User name from Home Page public String getHomePageDashboardUserName(){ return driver.findElement(homePageUserName).getText(); } }

Guru99 Simple POM Test case package test; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert;

converted by Web2PDFConvert.com

import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import pages.Guru99HomePage; import pages.Guru99Login; public class Test99GuruLogin { WebDriver driver; Guru99Login objLogin; Guru99HomePage objHomePage;

@BeforeTest public void setup(){ driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://demo.guru99.com/V4/"); } /** * This test case will login in http://demo.guru99.com/V4/ * Verify login page title as guru99 bank * Login to application * Verify the home page using Dashboard message */ @Test(priority=0) public void test_Home_Page_Appear_Correct(){ //Create Login Page object objLogin = new Guru99Login(driver); //Verify login page title String loginPageTitle = objLogin.getLoginTitle(); Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank")); //login to application objLogin.loginToGuru99("mgr123", "mgr!23"); // go the next page objHomePage = new Guru99HomePage(driver); //Verify home page Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mgr123"));

converted by Web2PDFConvert.com

}

What is Page Factory? Page Factory is an inbuilt page object model concept for Selenium WebDriver but it is very optimized. Here as well we follow the concept of separation of Page Object repository and Test methods. Additionally with the help of PageFactory class we use annotations @FindBy to find WebElement. We use intiElements method to initialize web elements

@FindBy can accept tagName, partialLinkText, name, linkText, id, css, className, xpath as attributes. Let's look at the same example as above using Page Factory Guru99 Login page with Page Factory package PageFactory; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class Guru99Login { /** * All WebElements are identified by @FindBy annotation */ WebDriver driver; @FindBy(name="uid") WebElement user99GuruName;

@FindBy(name="password") WebElement password99Guru;

@FindBy(className="barone") WebElement titleText;

converted by Web2PDFConvert.com

@FindBy(name="btnLogin") WebElement login;

public Guru99Login(WebDriver driver){ this.driver = driver; //This initElements method will create all WebElements PageFactory.initElements(driver, this); } //Set user name in textbox public void setUserName(String strUserName){ user99GuruName.sendKeys(strUserName);

}

//Set password in password textbox public void setPassword(String strPassword){ password99Guru.sendKeys(strPassword); }

//Click on login button public void clickLogin(){ login.click(); }

//Get the title of Login Page public String getLoginTitle(){ return titleText.getText(); } /** * This POM method will be exposed in test case to login in the application * @param strUserName * @param strPasword * @return */ converted by Web2PDFConvert.com

public void loginToGuru99(String strUserName,String strPasword){ //Fill user name this.setUserName(strUserName); //Fill password this.setPassword(strPasword); //Click Login button this.clickLogin();

} }

Guru99 Home Page with Page Factory package PageFactory; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class Guru99HomePage { WebDriver driver; @FindBy(xpath="//table//tr[@class='heading3']") WebElement homePageUserName;

public Guru99HomePage(WebDriver driver){ this.driver = driver; //This initElements method will create all WebElements PageFactory.initElements(driver, this); }

//Get the User name from Home Page public String getHomePageDashboardUserName(){ return homePageUserName.getText(); } }

Guru99 TestCase with Page Factory concept converted by Web2PDFConvert.com

package test; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import PageFactory.Guru99HomePage; import PageFactory.Guru99Login; public class Test99GuruLoginWithPageFactory { WebDriver driver; Guru99Login objLogin; Guru99HomePage objHomePage;

@BeforeTest public void setup(){ driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://demo.guru99.com/V4/"); } /** * This test go to http://demo.guru99.com/V4/ * Verify login page title as guru99 bank * Login to application * Verify the home page using Dashboard message */ @Test(priority=0) public void test_Home_Page_Appear_Correct(){ //Create Login Page object objLogin = new Guru99Login(driver); //Verify login page title String loginPageTitle = objLogin.getLoginTitle(); Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));

converted by Web2PDFConvert.com

//login to application objLogin.loginToGuru99("mgr123", "mgr!23"); // go the next page objHomePage = new Guru99HomePage(driver); //Verify home page Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mgr123")); }

}

Complete Project Structure will look like the diagram:

AjaxElementLocatorFactory One of the key advantage of using Page Factory pattern is AjaxElementLocatorFactory Class. It is working on lazy loading concept, i.e. a timeout for a WebElement will be assigned to the Object page class with the help of AjaxElementLocatorFactory . Here, when an operation is performed on an element the wait for its visibility starts from that moment only. If the element is not found in the given time interval, test case execution will throw 'NoSuchElementException' exception.

Summary 1. 2. 3. 4.

Page Object Model is an Object repository design pattern in Selenium WebDriver. POM creates our testing code maintainable, reusable. Page Factory is an optimized way to create object repository in POM concept. AjaxElementLocatorFactory is a lazy load concept in Page Factory pattern to identify WebElements only when they are used in any operation. converted by Web2PDFConvert.com

Download the Selenium Project Files for the Demo in this Tutorial < Prev

Next >

Related Articles Test Results for QTP Cucumber Installation Learn Object Spy & GetRoProperty in detail How to monitor SAP system and do performance checks 5 Books on SAP every Professional should Read

Search Search for...

converted by Web2PDFConvert.com

Selenium Tutorials 1) Introduction 2) Install IDE & FireBug 3) Introduction IDE 4) First Script 5) Locators 6) Enhancements 7) Intro WebDriver 8) Install Webdriver 9) First WebDriver Script 10) Forms & Webdriver 11) Links & Tables 12) Keyboard Mouse Events 13) Selenium & TestNG 14) Selenium Grid 15) Parameterization 16) Cross Browser Testing 17) All About Excel in Selenium 18) Creating Keyword & Hybrid Frameworks 19) Page Object Model & Page Factory 20) PDF, Emails and Screenshot of Test Reports 21) Using Contains, Sibling, Ancestor to Find Element 22) Core Extensions 23) Sessions, Parallel run and Dependency 24) Handling Date Time Picker 25)Using Apache Ant with Selenium

Feedback Your Feedback & Ideas are very important to us. Please share your suggestions here

About About us Corporate Training Jobs Contact Us Contact us converted by Web2PDFConvert.com

FAQ Write For Us

Android App

Certifications ISTQB Certification MySQL Certification QTP Certification Testing Certification Execute online Execute Java Online Execute PHP Online Execute PERL Online Execute Javascript Execute HTML Execute Python Interesting! Books to Read! Contest Quiz

© Copyright - Guru99 2015



converted by Web2PDFConvert.com