Wednesday, July 2, 2014

Modular Driven Framework

In most of the web application we have few set of actions which are always executed in the series of actions. Rather than writing those actions again and again in our test, we can club those actions in to a method and then calling that method in our test script. Modularity avoids duplication of code. In future if there is any change in the series of action, all you have to do is to make changes in your main modular method script. No test case will be impacted with the change.

Steps to follow:
Look for repeated functionality in your application for example the ‘login’ functionality. We can simple wrap this functionality in a method and we can give it a sensible name.

1. Create a ‘New Package‘ file and name it as appModule’, by right click on the Project and select New > Package. We will be creating different packages for Page Objects, Utilities, Test Data, Test Cases and Modular actions. It is always recommended to use this structure, as it is easy to understand, easy to use and easy to maintain.
2. Create ‘New Class‘ and name it as SignIn_Action by right click on package ‘appModule‘ and select New > Class. It will add new class ‘SignIn_Action’ under package ‘appModule’.
3. Now create a Public Static Void Method and name it as Execute and club the following steps in to it:
         Enter Username
         Enter Password
 Click on the Sign In button
This method will not have any Argument (driver) and Return value as it is a void method.

package appModule;
import org.openqa.selenium.WebDriver;
import pageObject.Login_Page;

public class SignIn_Action{
       public static void Execute(WebDriver driver){
Login_Page.txtbx_UserName(driver).sendKeys("testuser_1@gmail.com");
Login_Page.txtbx_Password(driver).sendKeys("Test@123");
Login_Page.btn_Login(driver).click();
}
}     
4.  Create a New Class and name it as Module_TC by right click on the ‘automationFramework‘package and select New > Class. We will be creating all our test cases under this package.
Now convert old PageObjectModel test case in to the new Module based test case.
package automationFramework;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import appModule.SignIn_Action;
import pageObject.Home_Page;
public class Module_TC {
       private static WebDriver driver = null;
       public static void main(String[] args) {
       driver = new FirefoxDriver();
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
       driver.get("ApplicationURL");

       // Use your module SignIn now
       SignIn_Action.Execute(driver);
       System.out.println(" Login Successfully.");
       Home_Page.lnk_LogOut(driver).click();
       driver.quit();
       }
}
We will notice that call to SignIn_Action will automatically execute all the steps mentioned under it.

No comments:

Post a Comment