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

SELENIUM: Some Useful Facts

Before we start designing a framework, there are few facts that we should always remember. It is not important what you have designed, it is more important that how good your product is. Also, this kind of analysis should always be done in the beginning so that you don't have to devote extra time and efforts for it later. It is always good to fix something in beginning than worrying about it later when it has become a big issue and become difficult to locate the issue. It's not like that we won't be able to fix it, we will definitely fix it but with more cost and efforts. Let's go through few of these facts. Layers in Framework You should always keep in mind the layers that should be there in the framework you are designing. Layers to be created generally varies application to application that you are creating but most of the frameworks contains below layers often. In above picture, there is workflow layer at the top. Workflows can be think of as somet...

Logging in Selenium - To File

In my previous post I explained you how you can configure log4net in your project to do logging to console with example. Now, in this post I will be explaining how we can configure log4net to log to file instead of console. As we already have working logs to console from our TestFramework so logging to file doesn't take much efforts. You just need to follow below steps and you are done. Configuring log4net to log to file Step 1 : Add an " app.config " file in your UITests project with content as shown below: Step 2:   Change configurator in Configure method of Log class That's it. Now, when you will run the test it will log to console as well as file named " Test.log ". This file can be found at \TestFramework\UITests\bin\Debug location in you project folder. As you saw, we just added app.config file and then changed the configurator in order to log to file. Earlier we used "BasicConfigurator.Configure()" which writes logs to cons...

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 ...