
Whenever you talk about repository by the name itself you can think that it is kind of storage. Object repository is the collection of object and object here is locators. Object Repository in Selenium Webdriver is quite easy to design so let’s get started.
Note- Before we start I also want to highlight that people also use the same concept to store all kind of configuration details as well.
The example you can keep URL, browser details, some path, port details and so on, in that case, this will behave as the configuration file.
Here locators mean WebElement id, name, CSS, XPath, class name,LinkText, PartialLinkText, TagName etc.
Object Repository in Selenium Webdriver
To understand the importance of Object repository, we will take a real-time scenario.
The scenario is you have 100 test cases and in all test cases, you have login scenario. If your application changes now and some locators changes like id changes from email to login-email then you have to modify all the test cases and you have to change the id.
This process does not make any sense and this will be a very tedious task, so to overcome with this we will move all locators in a separate file and we will link all test cases to this file. In case any changes happen in our locators then we will simply change in that file, not all our test cases.
This will increase the modularity of test cases and I will strongly suggest that you should use Object Repository in Selenium Automation.
Note- Many companies also use Page Object Model to store all locators which also make the test in a readable format. Depends on your current framework style you can adopt any of these. Personally, I use Page Object Model using PageFactory which make my test more readable and in terms of performance as well, I felt POM is faster.
I have uploaded the video on same.
Object Repository in Selenium Webdriver- Selenium Tutorial
Precondition
1- Project should be created and Selenium jars should be added- Click here to configure .
2- Now create a new file and give file name as Object_Repo (depends on you)with extension .properties
For this right click on project,> create a new file > Specify name
Select folder and specify name & extension
3- Now file is created > Double click on file > File will open in Edit mode
Object repository works on KEY and Value pair so we will specify Keys based on our project and in values we will give locator value.
In below example, I have taken XPath for username, password and login button for the facebook login page.
Key you can write based on your project standard, but value should be correct which is coming from the application
facebook.login.username.xpath=.//*[@id='email']
facebook.login.password.xpath=.//*[@id='pass']
facebook.login.Signup.xpath=.//*[@id='loginbutton']
4- Write Selenium script and use the same in the script
Object Repository in Selenium Webdriver- Selenium Tutorial
package ObjectRepoExample;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class TestFacebook {
@Test
public void TestOR() throws IOException{
// Specify the file location I used . operation here because
//we have object repository inside project directory only
File src=new File(".Object_Repo.properties");
// Create FileInputStream object
FileInputStream fis=new FileInputStream(src);
// Create Properties class object to read properties file
Properties pro=new Properties();
// Load file so we can use into our script
pro.load(fis);
System.out.println("Property class loaded");
// Open FirefoxBrowser
WebDriver driver=new FirefoxDriver();
// Maximize window
driver.manage().window().maximize();
// Pass application
driver.get("http://www.facebook.com");
// Enter username here I used keys which is specified in Object repository.
// Here getProperty is method which
// will accept key and will return value for the same
driver.findElement(By.xpath(pro.getProperty("facebook.login.username.xpath"))).
sendKeys("Selenium@gmail.com");
// Enter password here I used keys which is specified in Object repository.
// Here getProperty is method which
// will accept key and will return value for the same
driver.findElement(By.xpath(pro.getProperty("facebook.login.password.xpath"))).
sendKeys("adsadasdas");
// Click on login button here I used keys which is specified in Object repository.
// Here getProperty is method which
// will accept key and will return value for the same
driver.findElement(By.xpath(pro.getProperty("facebook.login.Signup.xpath"))).click();
}
}
You can also create the reusable method which will accept the key and will return the value. Hope you liked the post and video, if yes then please share with your friends as well.
For More updates Learn Automation page
For any query join Selenium group- Selenium Group
Hi Mukesh,
What is the use of <Span style……. ? Is it necessary to use?
Regards,
Yash
Hi Yash,
It is an HTML tag. In UI automation there is no strict rule for the usage of any tags while locator selection. You can avoid it if you don’t want to use span tag
Yes. I am getting nullPointerException.
File f1=new File(“D:\Selenium\Pulse\src\CCHS_241\Repo.properties”);
//FileInputStream fis=new FileInputStream(f1);
Properties pro=new Properties();
FileReader o1=new FileReader(f1);
pro.load(o1);
System.out.println(pro.getProperty(usrname));
My usermane and password has following attributes:
name=’username’ and for password its id=’password’
suggest me the repo file and command to fetch these attributes from repo file
Hi Tanushree,
Please don’t mention single quotes anywhere in Repo.properties file. Moreover please use below code
File f1 = new File(“D:\\Selenium\\Pulse\\src\\CCHS_241\\Repo.properties”);
FileInputStream fis = new FileInputStream(f1);
Properties pro=new Properties();
pro.load(fis);
System.out.println(pro.getProperty(username));
Hi Mukesh, I need your help.
I have created the repository file, but keys are not picked from that file. hence test fails. When I gave direct locator path , test case gets executed euccessfully.
Please suggest how to resolve issue.
Hi Tanushree,
Are you getting NullPointerException in console?
Hi Mukesh is making in selenium property fiile for filesd like fisrtname and last name and email,password and signup .
can we do alternately in selenium by creating a library file and keep all the elements which we used frequentlky?
should we use both libaray and object repository in selenium?
Hi Mani,
It fully depends on how you want to use it. There is no standard defined for any scenarios. Only motto while designing framework are robustness, non redundancy, scalable. If you think that you can us these values multiple times then go ahead with its library creation.
Hi ,
Followed the exact steps but the variable pro is returning null. what could be possible debug method?
Hi Myra,
Check whether you are providing correct path for file.
Hey thanks Mukesh! Got it correct!
Do you have any tutorial for log4j ? Could you pls share the URL ??
Hi Myra,
Here is the link http://learn-automation.com/how-to-create-log-files-in-selenium/
Hi I followed the exact steps in the video, I am unable to open browser and test is saying failed, can you help me how to fix this
Hi Radha,
First check whether you are able to read value against key which you have given inside your script. Do print its value and then proceed further.
will object repository only takes xpath or any attribuite for facebook i have tried with id it shows wrong
it can take any key value pair
Hi Mukesh.
I have mentioned a xpath value in properties file as mentioned below:
xpathVal1=//*[@id=’aaa’]/option[1]
if i call this in script like driver.findElement(By.xpath(pro.getProperty(“xpathVal1”).click
it is working fine.
Actually, i wanna use this in a loop. Xpath value is changing as below
//*[@id=’aaa’]/option[1]
//*[@id=’aaa’]/option[2]
//*[@id=’aaa’]/option[3]
So i wanna place this in a for loop.. how to do it.
Could u pls help me out.
I tried like this. I have placed the value in properties file as //*[@id=’aaa’]/option[“+i+”]
and call this in for loop with integer value i from i =1; i<=200; i++..
Hi Kumar,
Whatever java reads from properties file is based on key-value pair. In your case, you are reading xpathVal1 as key then you will get value as //*[@id=’aaa’]/option[1]. Value is always taken as String datatype. Similarly xpath inside properties file like //*[@id=’aaa’]/option[“+i+”] never works. You need to process xpath separately in order to call these with index. Or mention all these xpaths in properties separately as xpathVal1, xpathVal2 & xpathVal3 and use them as per your requirement.
Thanks Mukesh. Will try that.
Eventhough this question is not related to this post, i would like to ask you for basic clarification.
I have used Selenium Implicit Wait in the starting of my script after the driver object initiated. driver.manage.timeouts().implicitlyWait(10, TimeUnit.SECONDS).
So throughout my script for each element, will my script waits for 10 Seconds? or do i need to add the same line of code everywhere where i need to put wait?
Also let me know if element on the page loads in 2 seconds what will happen? still it waits for 10 seconds?
Hi Kumar kindly check http://learn-automation.com/explicit-wait-in-selenium-webdriver/
Hi Mukesh. Nice tutorial. Is there a way to find if a property in object repository properties file is id or name or tag name?
Hi Daisy,
Properties file works on key value pair values. Only demarcation between key & value is equals(=) symbol. Generally there is no way to provide value specific to id or name etc.
u rcode above is not executing it is showing as in file[ut stream error.cannot load source file i.e obj repositry file
Hi Sanjay,
It seems file path is not correct. Please check file path.
thank you mukesh…u r awsome man….Am follwing your youtube channel too.your teaching skills are awsome..thank you so much…
can you explain how to use inheritance concept in selenium for testcases….
thank you
Hi Sanjay,
This is how we can use inheritance in Selenium https://www.youtube.com/watch?v=nJfGMjYjD58
Hi Mukesh,
Can you tell me how to create java files, each for test cases and test data?
Hi Mayur,
Your question is not clear. Can you repeat your question in simple manner?
Went through some sites to understand property.I was confused. Here you have explained in very simple and clear manner.Thank you
Most welcome Aparna 🙂 Keep visiting and let me know if any help.
Please email me the answers. Joined the blog. Thanks a lot
Sent
Hi Mukesh,
Request you to help me with Selenium framework, specially Hybrid and key driven framework.
Where i can get your tutorial for these two frame work??
Please let me know the path for your these two Hybrid and key driven framework tutorial.
Thank you Mukesh
Hi Deepak,
Here is the link learn-automation.usefedora.com/courses/selenium-frameworks-and-selenium-question-answers
Hiii Mukesh, can you tell me how to write a list in page object repository?
Hi kalpit,
Can you explain in brief? question is not clear.
hiii mukeesh,
how to write a list in a page object model using find by or find bys annotation.
Hi kalpit,
You can use By class to handle this.
Hai Mukesh ,
Your website is very useful for me thanks for your help & time. iam getting file not found exception how can i overcome it, did you posted any video tutorial on this concept please let me know.
Hi Kalyan,
File path is not correct please make the changes and let me know.
Hello Mukesh, I have been using .properties files in my projects only because it was relatively easier to implement than Page Object Model. Can you please tell me between .properties object repository file and POM approach which one is more advantageous and standard?
Page Object model is more useful.
Hi Mukesh,
Can you make a video on Selenium and TestNG Interview questions for 2+ experienced which will be helpful to us?
Hi Manjunath hope you have gone through http://learn-automation.com/selenium-interview-questions-and-answers/ and be ready with all question.
Hi Mukesh,
Your website is very useful for me thanks for your help & time. please share me link for Page Object Model with Page factory…
Hi Venkat here you go http://learn-automation.com/page-object-model-in-selenium-webdriver/