Saturday, March 12, 2016

Page Object Model pattern in Selenium?

Page Object Model in selenium is a design Pattern (Design Pattern is a general reusable solution(best practices) to a commonly occurring problem within the context in software design) implemented using selenium Web Driver. Page Object Model is used to create object repository for elements in the web application used in test flows.


Page Object Model Pattern serves following purposes:


  • Segregating objects definition from test scripts in separate classes making test scripts independent of page elements and locators, thus reducing the maintenance cost in case of changes in elements locator in the Application under test.
  • Defining Page elements and page methods in Page classes help in re-usability of the page elements and methods in different tests reduces the line of code and makes it more maintainable as changes in application needs to be implemented at Page classes only.
  • Make code more readable in the test scripts.
  • Easier for testers with less knowledge of selenium/Java to create test scripts once the Page classes are prepared.

Page Object Model - Do not see too seriously

Understanding how to automate a web application using selenium Web Driver using Page Object Model design pattern


Let us try to understand how Page object model pattern is implemented with an example. 


Suppose there are number of pages in an Web Application and within each page there are multiple elements in each page. Let us assume linear approach for creating automated test cases. Suppose there are ~100 test scripts(workflows) to test the application. Each of the workflow starts with login into application. In each of the test cases, we would have defined the locators for input fields for username and password and login button elements and interact(perform action) with the element. 


Creating test using above approach will result in following problems:
  • In case of changes in an element locator, changes needs to be implemented at multiple tests
  • Readability of test will be poor due to locators defined at test level. 
  • Lines of code will be higher and approach for creating test scripts will vary from one test developer to another.
  • Requires script developer to have good selenium knowledge for test scripts creation. 

Object repository structure in QTPA better approach would be to define elements locators at a different location from test scripts. Also methods for working with elements should be defined, separate of the test scripts.


If you had worked with QTP before, the object repository used to be maintained in tree structure. In Page Object model design pattern,Web Pages are represented by classes with elements in the Page defined as members of the class. Actions on the elements are implemented as methods in the class very much similar to QTP approach.



Implementing Page Object Model:


  • Create a class for login Page (similarly create class for different pages).
  • Define the objects locator in the Page as member of the class.
  • In the constructor method for the Page class, load or intialise the elements defined in the Page using Page Object Factory. 
  • Create user defined methods in the class to input data in the input box, clicking the login button, and methods for successful login or failure. 
  • An object of the page class will be created in the test scripts to interact with the objects and methods for Page class.
    Page Object model pattern implementation

I have not added any code snippet in this article, but below reference article have nice examples explaining the code and concept of Page Object model pattern in selenium.


Useful References for code and concept of Page Object Model

Hope you find this post informative or atleast the references useful.

Sunday, February 21, 2016

Maven POM.xml: Dependencies for Selenium, TestNG and junit

While working with Selenium, TestNG and junit with maven, we need to add in the Project Object Model (POM.xml), dependencies for Selenium, TestNG and junit. In this article, we have explained how to add the required dependency in the dependencies section in pom.xmlfile.

Add the dependency in the dependencies section for the required artifacts. Also please update the version as per latest version of the artifact.


Selenium Dependency:

<dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.52.0</version>
</dependency>

junit Dependency:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
</dependency>

TestNG Dependency:

<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.8</version>
  <scope>test</scope>
</dependency>

Saturday, February 20, 2016

How to use maven to create selenium project

In this article, we will understand the basics of maven and how to create maven project for Selenium WebDriver in eclipse.

Problem Statement of this article:

  • Understanding the use of maven for creating a selenium Project.
  • Installing maven plug-in for eclipse
  • Creating a maven Project in eclipse
  • Adding dependencies for Selenium


Understanding the use of maven for creating a selenium Project.


  • Maven provides a uniform build system.
  • A Project Object Model or POM is an XML file in maven that contains project and configuration information used by Maven to build the project.
  • We can add and configure dependencies for selenium, TestNG and other resources in the maven Project using POM.xml file
  • Maven helps to define Project structure for better management of resources.
  • Maven automatically downloads the necessary files added in dependencies for WebDriver and other resources while building the project.


maven plugin download from eclipse

Installing maven plug-in for eclipse



Below are the steps to install maven plug-in for eclipse

  • Open eclipse and click on Help>Eclipse Marketplace
  • Search for Maven integration for Eclipse in eclipse marketplace. Install Maven integration for Eclipse
  • Restart eclipse.
  • Maven plug-in has been added in eclipse.


Creating a maven Project in eclipse:


  Pre-Condition: Maven Plug-in is added in eclipse.Below are the steps to create a maven project in eclipse.

creating maven project in selenium
  • Navigate to File>New>Project.
  • It will ask to select a wizard. Select Maven>Maven Project and click on Next
creating maven project in selenium
  • To start with, select create a simple project in the window and click on Next.
  • Provide the details for the artifact including Group Id, Artifact Id, Version, packaging to start with.
  • Click on Finish.
creating maven project in selenium

Once we click on finish,maven project is created in Java. As mentioned earlier, All the configurations of the Project are saved in a POM.xml file as shown below:

creating maven project in selenium


POM stands for "Project Object Model". It is XML representation of the Maven project. POM.xml file inherits from base superPOM.xml

How to use selenium libraries in the maven Project.


We can use selenium libraries by adding dependencies for selenium in the Project Object model as shown in the code snippet below:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>qaautomation</groupId>
  <artifactId>Selenium_eclipse_maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>My first maven</name>
  <description>testing</description>  
  <dependencies>
      <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.48.2</version>
    </dependency>
    <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.8.1</version>
</dependency>    
  </dependencies>
</project>

References: