Skip to main content

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 this follow below steps:
  • In TestFramework project right click on "References" and then select "Add Reference" option. 
  • After this, browse log4net.dll file and press ok. 

Now, as we have successfully added log4net references to our project, we are ready to use it in our application.

Let's create a basic code

Create a "Log" class in TestFramework as shown below:



After this, you can call "Write" property of Log class whenever you want to log. E.g. we can log entered username and password whenever login method is called as shown below:



Before above logging statements executes, we need to call "Configure()" method of Log class so that logging can be done. This method must be called once for a test execution.

Let's place this calling statement in "ClassInitialization" method for now as shown below:



Now, when you execute any test which calls login method you can see below console log after execution:



This is it. You have just successfully logged from your application.

In this example, I have used info level of logging but you can use any log level based on the kind of current situation of application. I am not going through in details about levels as you can get it easily from anywhere if you want to learn this.

Below are the levels which are mostly used during logging.



If you have read about log4net from the link I provided to you, you must be knowing that we have just logged to console. But, this is not just enough what a test framework should have. It is important to log to files in order to get it's maximum benefit.

So, let's see how can we configure log4net so that it can be used to log to files. I will be continuing this in my next post so that you can first practice with this basic console logging before going for next one.

Thanks for reading this post. See you in the 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...