Skip to main content

SELENIUM: Creating a Basic Test


By now you must be pretty confident of what actually selenium is, how we can set up an environment to build an automation framework and what kind of things we should have in our mind before we start building a framework. Also, you know few of the basic concepts too.

I think now it's a good time to start building our framework. The approach I will be using to build the framework is that I will be just creating a basic test first. After that by the course of time I will be adding more tests in it and in this way our framework will start growing in size with each test added.

I will be doing lots of refactoring as and when required so that the framework remains well structured and easy to use.

As to build a framework we need an application, I will be using WordPress for this purpose. You can use any application but if you need to get a start on WordPress too you can download and setup from this link.

Instead of adding all the required things in the framework what I will be doing is I will be creating tests and then adding the required things to execute this test in the framework. Hence, we are choosing the test driven framework rather then framework driven tests.

First Basic Test

 As a first basic test, lets create the below test and then corresponding framework.
  • User can login to application
  • Verify it
For this,  Add a class e.g. "LoginTests" in UITests project. Create a test method as shown below



Here you can see that I have created a test "User_Can_Login_Successfully" and in this test I have added required steps to check login.

It is a good practice not to declare variables in tests. Rather all these kind of things should be kept in framework which makes much easier to understand and use.

In test there should be a logical flow which a tester need to perform while executing particular test rest should be handled by the framework itself.

Driver class is already known to you as shown in my "Hello Selenium" post.

Create LoginPage and HomePage classes in "TestFramework" project as shown below

LoginPage class:



HomePage class:



Execution of test:

This test has below steps
  • Driver.GoTo(@"http://localhost:26382/wp-login.php");
  • LoginPage.Login("testuser", "testpasword");
  • Assert.IsTrue(HomePage.IsAt,"Login not successful"); 
When you run this test, first it will navigate to  "http://localhost:26382/wp-login.php" i.e. login page of wordpress.

After this it will call Login method of LoginPage and pass username and password as parameters. Further,  login method calls the private methods i.e. EnterUser(), EnterPassword() and then ClickLogin().

After login step, there is one assert step that basically verifies whether user is on home page or not. If it is not on home page then tests fails with assert message as "Login not successful".

That's it....you have just setup your framework and added first test to it. Great...!!!!

In this example, I located the web elements in the methods itself which can be refactored so that we don't have to bother for this in methods. In my later posts we will be refactoring our framework more and more until it becomes easier, less complex and well structured.Also, I will be writing about locators in brief for those who don't have much idea about it. We will also learn about selenium's PageFactory in details too.


Thanks for reading this post and see you in the next post very soon. 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...