Thursday, December 18, 2014

Object Repository in Selenium Using TestNG



Object Repository is a place where we can store objects information, it acts as interface between Test script and application in order to identify the objects during the execution 

Uses of Object Repository 
1.      Object repository is a centralized location of the objects and their properties, so that if any object information changed in AUT, you need not to change in all the scripts, it is enough to change in the Object repository 
2.      Easily maintain your tests or components when an object in your application changes 
  
 Creating Object repository: 
It’s up to you create an object repository, and which file you want to use, you can use properties file, you can use XML file….etc. You can learn about this in framework design concepts in previous posts;Let us discuss about few ways here to create a object repository:  

Lets we take our previous post of Data Driven Using TestNG as example. 

But this time we are going to use Object Repository to take the value as input. 

How to create new properties file 
To create new properties file, Right click on your project package -> New -> Other . 



 It will open New wizard. Expand General folder In New wizard and select File and click on Next button.   
 Give file name objects.properties on next window and click on Finish button.   
It will add object.properties file under your package. Now copy paste bellow given lines in objects.properties file 

objects.properties 
username_testbox=Email 
password_textbox=Passwd 
Signup_btn=signIn 
password_value=******* 

In above file, Left side value Is key and right side value Is element locator(by namei.e) (By.name("Email")  
of all web elements of Gmail page. You can use other element locator methods too like xpathcss ect..  

All the element locators are coming from objects.properties file using obj.getProperty(key). Here key Is reference of element locator value in objects.properties file. 
  

Finally your project explorer look like this 
Copy and paste blow code in package frameworktestng -> logintest.java  

package framworktestng; 
import java.io.File; 
import java.io.FileInputStream; 
import java.util.Properties; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.testng.annotations.AfterClass; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.Test; 
 public class logintest { 
 private WebDriver driver; 
  @BeforeClass 
 public void Startup() { 
  driver = new FirefoxDriver(); 
 } 
 @Test(description = "Read Gmail account") 
 public void Login() throws Exception { 
 driver.get("http://www.gmail.com"); 
 File src=new File("object.properties"); 
FileInputStream fis=new FileInputStream(src); 
Properties obj=new Properties(); 
obj.load(fis); 
System.out.println("Property class loaded"); 
 driver.findElement(By.name(obj.getProperty("username_testbox"))).sendKeys(obj.getProperty("username_value")); 
 driver.findElement(By.name(obj.getProperty("password_textbox"))).sendKeys(obj.getProperty("password_value"));driver.findElement(By.name(obj.getProperty("Signup_btn"))).click(); 
 Thread.sleep(9000); 
   
 } 
 @AfterClass 
 public void teardown() { 
  driver.quit(); 
 } 
} 

Run above given example In your eclipse and observe execution. 
  
Now supposing I have many such test cases and some one has changed Id of any button of calc application then what I have to do? I have to modify all test cases? Answer Is No. I just need to modify objects.properties file because I have not use element's Id directly In any test case but I have Used just Its key reference In all test cases. 

Any questions please leave comments... 

Hope you like this post.. 

No comments:

Post a Comment