Skip to main content

SELENIUM: Test With Usage of Nested Class

In my previous post we learnt about nested classes. So, now this is the time to make use of that in our framework. This is how we should always progress, learn about something and then implement it otherwise there is no use of learning new things.

So, let's now create a test where we can use nested class.



About test

In this test we will try to perform below steps:
  • Navigate to login page
  • Login to application
  • Navigate to Posts->All Posts menu
  • Confirm that we are on "All Posts" page
We are already familiar with step 1 and 2. So, we will be only focusing on  steps 3 and 4.

 From above code snippet you can see that I have used nested class created in previous post i.e.

"LeftNavigation.Posts.AllPosts.Select(browser);"


As mentioned in previous post, this code will make user navigate to Posts->All Posts page and actual code which makes this happen is in "Select(browser)" method. See that we are passing browser instance as parameter to this method as we need this browser instance to be used.



Further as mentioned in previous post, we are not using code directly here in this method to navigate to a particular menu. Instead we are using another class i.e. "MenuSelector" for this as doing this will make code more readable, easy and reduce the redundancy.

Again, we are passing browser instance to MenuSelector class as we want it to use the same browser instance.


"var menuSelector = new MenuSelector(browser);"


After this we are calling "Select()" method of menu selector class which in turn will do the actual navigation.


"menuSelector.Select("menu-posts", "All Posts");"


In this Select() method we are passing id of top menu web element i.e. "Posts" in this case and link text of sub menu element i.e. "All Posts" in this case. This way every time when we need to navigate to a particular menu we just pass id of top menu element and link text of sub menu item calling the same method.



 Once this step is executed in next step we are confirming whether it was successful or not using below line of code:

"Assert.IsTrue(allPostPage.IsCurrentPage(), "Not the expected page");"


To do this I have created one more class "AllPostsPage" and created a method i.e. "IsCurrentPage()" to check whether we are on this page or not.



In "IsCurrentPage()" method I am just checking whether there is "Add New" link displayed in <h1> tag or not. If it is showing then we are on right page otherwise not.



Further as we have created a new class so, make sure that we have included code to declare and instantiate it's object in our test class as mentioned in my earlier post. i.e.

"private static AllPostsPage allPostPage;" and


"allPostPage = new AllPostsPage(browser);" line of codes.


This is it.


So, in this post we added one more test to our framework and make use of nested class and common method. This is what we will do in our future posts too. Whenever there is a possibility of making something more easier to use or making something common in order to reduce redundancy we should do that as our main motive always is to build a framework that is easy to use otherwise we end up building a framework which is used by no one.


In my next few posts I will be adding more tests to our framework which makes use of the same nested class and common method to make it more clear how it benefits us.





Thanks for reading this post. See you in next post. Cya.




Comments

Popular posts from this blog

"Hello Selenium"

Now, as we have already setup the required environment, let's just start with a hello world test with selenium. In this let's just write a basic test to make sure that our environment is working properly. For this hello selenium test we will be automating below test: Navigate to " https:// www.google.com  " Write "Hello selenium" in search box Press search button Below are the code snippets: Test class UnitTest1 containing required test. Here in this class, at the top I have used two statements i.e.     using Microsoft.VisualStudio.TestTools.UnitTesting;     using TestFramework; First using statement is required in for writing unit tests and second using statement is required so that we can access methods from class under TestFramework namespace. There is [TestClass] attribute used with this class. This is required so that tests written in this class can be recognized. If you miss this attribute then your tests are not going ...

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: Adding Next Test With Proper Test Structure-1

As I mentioned in my previous post that now its time to refactor our tests a little bit so that each test is written with proper test structure as required. After refactoring tests we will add one more test to our framework with proper test structure. So, lets do it now. Refactoring tests Till now we have added two tests to our framework i.e.         And Let's refactor these tests first before adding more tests to this framework.  In each method let's log some message so that we come to know how the execution was done. # AssemblyInitialize method:     In this method let's put code to initialize the log so that it can be used throughout the assembly. Before moving to next method let's talk about other refactoring made in this test project. #1: All static classes are made non-static so that we can created instances of page objects instead of directly using them. So, now on we cannot use class directly. Instead we will...