Skip to main content

SELENIUM: Page Object Model


As now we have created our first hello selenium test successfully, I think it is the good time to know something about architecture of framework that we are going to design. It is always good to know what actually happens when you do something as it gives you a better understanding of it and you can easily know what you need to do, how you need to do and where could be the fault if something wrong happens.

So, let's go through it in brief.


Page Object Model 


The basic idea of this page object model is that we have a class for each page or a logical part in our application and it contains methods in it which represents the functionality of this page. Further, tests interacts with the corresponding page class and access its methods as required. 




In above picture there is a login page that is there in our application and corresponding to this login page there is a LoginPage class having all the methods defined in it which corresponds to the various functionalities of this login page.

After this, there are few tests which are interacting with the login class to execute a particular scenario. 

In page object model, it is not necessarily true that there could be a class for each page in our application. We might create a page for each logical module too e.g. header and footer.

Further, methods in page class could be all the actions that user can perform on this page rather than creating one for each ui element on the page. 

In general, effectiveness of the framework depends upon how actually we manage different layers? How good our classes are? Have we covered all the functionalities that a page represents? Can user write all his test scenarios using this framework and how easily he/she can use this framework?

So, we should always keep these things in mind while creating a framework besides other important things.




In my next post I will be writing about some useful facts that you should keep in mind while developing a framework.


Thanks for reading this post and see you in next post. Cya!  





Comments

Popular posts from this blog

Logging in Selenium

Any application is incomplete until it's activities are traceable. Here comes the use of logging. By logging important actions you can later on track anything you want especially when there are some error situations. It becomes easy to debug the issues if logs are generated properly. Similarly, it is very important that our automation framework generates logs so that whenever any test fails, we can track the issue by tracing it's logs. In this post, I will be explaining you how we can log using log4net in selenium. Before using methods of this library we need to configure this to our application. Let's do this first then. Configuring log4net in selenium: First of all you need to download this library so that this can be used. You can read about log4net and then download it from this link and save the dll file after extracting it to folder that is under your project folder. After downloading this library you need to add references of this in you project. To do ...

SELENIUM: Using Nested Classes

In this post I will be using nested class pattern to make few things easier. e.g. If you see in our test application there is a navigation bar on left side containing various menus i.e. Posts, Pages etc. Further each main menu contains sub-menu e.g. Posts menu contains sub-menues as "All Posts", "Add New", "Categories" and "Tags". In this type of situations, it is good to use nested classes to make things more readable and easy to use. E.g. Suppose I want to access "All Posts" navigation then I would want this to be done like this. " LeftNavigation.Posts.AllPosts.Select(); " i.e. I would want that there would be a class called "LeftNavigation" and when I press '.' (dot) it shows all the main menues in this navigation e.g. "All Posts", "Pages" etc. then I choose " LeftNavigation.Posts " and again when press '.' it shows all the sub-menues inside this Posts menu...

SELENIUM: Using Common Methods in Different Tests

As I mentioned in my previous post that we will create few more tests which will make use of the nested navigation class and common menu selector class to see how we can make use of these. So, let create one more test to check some other navigation e.g. navigating to "Add New" page and to implement this we will make use of the same navigation class and menu selector class. About test: In this test we will write code to implement below steps: Navigate to login page Login to application Navigate to Posts->Add New post page Confirm that we are on right page Again, we are already familiar with step 1 and 2 so, we will be focusing step 3 and 4 only. Before we start writing code for this test let's go through some of the refactoring that is needed MenuSelector class's select methods created in previous post. MenuSelector class created in previous past: We will be refactoring below areas in this class: #1: Used WebDriverWait #2: Removed browser.W...