Skip to main content

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 something which is bigger than pages and can utilize multiple pages when executed. E.g. if we think about invoicing system then "Send invoice to erp system" might be considered as a workflow as in order to perform this action one has to first create an invoice, approve and then send it.

Then there is a page layer below workflow. Workflows are going to be dependent on pages. I won't be explaining here about pages as we already have discussed about this in my previous post "Page Object Model".

 Below pages layer there is a layer for common things like navigation or others which is common to all pages. Hence, multiple pages can share a navigation and in this way you don't have to define same methods multiple times at multiple places. So, it is a good practice to have common things separately. We will be going through this in more details in my later posts when we actually define these kind of things.

Below that there is selenium where our framework is  going to interact with.

Easy to Use

Framework that we are creating should always be designed in such a way that it is easy to use. It's been seen that lots of products just goes into trash in-spite of having good content just due to the fact that it was not easy to use. Hence you end up waste your precious time building a framework which won't be used at all. So, keep it in mind always.

"If tests are not easy to run, they won't be run at all"




In my next post we will add our first test with correponding code to our framework.


Thanks for reading this post and 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...