Thursday, July 28, 2011

How To Setup - Selenium 1.0, JDK, TestNG, ANT

How To Setup - Selenium 1.0, JDK, TestNG, ANT

Selenium setup checklist
1. JDK
2. ANT
3. Eclipse IDE
4. Eclipse TestNG
5. Selenium
6. How to start Selenium server
7. How to create selenium project in Eclipse IDE
8. How to execute code in eclipse IDE using TestNG

Select following link to for Selenium full-fledged implementation.

Note: You need to have admin privileges to install few software's.

1. JDK

Download from http://www.oracle.com/technetwork/java/javase/downloads/index.html



JDK is machine and OS dependent, Check whether your machine is 32 OR 64 Bit.
How to Check?
Programs -> Accessories -> System Tools -> System Information

Download your corresponding JRE file and install on your PC.


Check whether it is installed correctly?
Type java  -version at the command prompt, you should see the version related info.

2. ANT


It is a self installable exe file, located the java JDK directory during installation. 
Logoff and login for complete installation.
Check whether it is installed correctly?
Type ant  - version at the command prompt, you should see the version related info.

3. Eclipse IDE


It is not required to install this software, just run the exe file to open the editor.

4. Eclipse TestNG

Inside the eclipse, select   Help - > Eclipse Market Place
Search for TestNG and install directly into IDE.



5. Selenium



Unzip the file and copy Selenium Server and Selenium Java client driver FOLDERS separately for later use.



6. How to start Selenium server

In the "Selenium server" folder as mentioned above, you can find “selenium-server.jar”.
Place this file in new folder "SeleniumServer", from the command prompt opens this folder path and run following command.
Java  –jar selenium-server.jar
You will see following screen, don’t close the window (Keep it the window open)


If you see any errors, something gone wrong with the server. 

7. How to create selenium project in Eclipse IDE


Open the Eclipse IDE by selecting eclipse.exe file.
Select File->New -> Java Project


Enter project name and hit “Next”




Select “Finish”
Now you will see the project name "MyFirstProject"  in the “Package Explorer” window.
Right click on the project name and create “Package”


Click on finish after typing the package name "Selenium".


In the package explorer, right click on the package name “Selenium” and select “Configure Build Path”.



Add following JAR files showed in the below screen by selecting “Add external jar” button.
You will not be able to run your test without these files, try locating it and add those files shown in the below screen.



Now, right click on the package "Selenium" and select class


Enter class name “Test” and select Finish.



You will notice a new class is created in the package explorer.
In the same way create classes as per your requirement and place necessary code.

8. How to execute code in eclipse IDE using TestNG

Copy the code from the below link and execute the test.
http://bharath-marrivada.blogspot.com/2011/07/selenium-testng-parameterization-excel.html


If you still see any errors on the screen, place the cursor over the error code, Eclipse IDE provide auto suggestion on how to resolve the issue.


---

Wednesday, July 6, 2011

Selenium - TestNG Parameterization

Selenium - TestNG Parameterization

Based on the testing requirement you many need to repeat the test with multiple data sets.
In this post I will explain how to achieve this (parameterization) using TestNG.

There are two ways of sending parameters to the selenium test
(1)using testng.xml
(2) Programmatically
    i)array of objects (Object[][])
    ii)Iterator

Note: I have purposefully commented selenium code for better understanding of TestNG Parameterization.

Using testng.xml 
How to execute the test with Eclipse, select this link.
How to execute the test with Ant, select this link.
Selenium TestNG, Select this link.

Below sample code will help you understand how to send parameters from testng.xml.
Testng code


  
  
  
    
     
   
   
     
        
        
     
   
 


Java code
package package1;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.*;

public class Sample 
{
    //public Selenium s = new ds( "localhost",4444,"*iexplore","www.test.com");
    //private Selenium s = new ds( "localhost",4444,"*firefox",BASE_URL);
    @BeforeClass (alwaysRun=true)
    protected void setUp()throws Exception
    {
     /*
     s.start();
     s.windowFocus();
     s.windowMaximize();
     s.windowFocus();
     */
    }
    @AfterClass(alwaysRun=true)
    protected void tearDown() throws Exception
    {
     //s.stop(); 
    }
    @Parameters({"UserNameTestng","PasswordTestng"})
    @Test(groups={"test","SampleDemo"},enabled=true)
    public void test_verifyData1(String s1,String s2) {
     System.out.println(s1+" -  "+s2);
    }    
}



Select following option while executing the code from eclipse (Look at the screen shot)

Output for the above code (Look at the below screen shot)


Using this method we can pass the parameters using xml file, but we can't achieve repeatability, executing the same test with different data sets.

 Programmatically


i)array of objects (Object[][])
If  you have data set, it is possible to place all the values in @dataprovider and run the program.
Dimension one is considered as number of rows, dimension two is considered as number of different data set columns. It will automatically repeat the execution of same code as per the object dimension one count.
Below sample code will help you understand the concept in a better way.

Java Code
package package1;


import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.*;

public class Sample 
{
    //public Selenium s = new ds( "localhost",4444,"*iexplore","www.test.com");
    //private Selenium selenium = new DefaultSelenium( "localhost",4444,"*firefox",BASE_URL);
    @BeforeClass (alwaysRun=true)
    protected void setUp()throws Exception
    {
     /*
     s.start();
     s.windowFocus();
     s.windowMaximize();
     s.windowFocus();
     */
    }
    @AfterClass(alwaysRun=true)
    protected void tearDown() throws Exception
    {
     //s.stop(); 
    }
    
   @DataProvider (name="TestData") 
   public Object[][] createData1() {
   return new Object[][] {
     { "Bharath", "11" },
     { "Raj", "22"},
       };
    }
        
        
    @Test(dataProvider = "TestData",groups={"test","SampleDemo"},enabled=true)
    public void test_verifyData1(String s1,String s2) {
        System.out.println(s1+" - "+s2);
    }    
       
}

Output for the above code (Look at the below screen shot)

This method will be useful when you have the data set upfront, What is the situation if the data exist in excel or notepad (csv format).

ii)Iterator
If the data exist in excel or notepad, this technique is the best choice. Below sample code will help you understand the concept in a better way. I have used Jexcel api to read data from the excel file, don't forget to add jxl.jar to package build path.Basically I am reading the data from the excel file and feeding it to the iterator object.


Java Code
package package1;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.*;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;


import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;


public class Sample 
{
    //public Selenium s = new ds( "localhost",4444,"*iexplore","www.test.com");
    //private Selenium selenium = new DefaultSelenium( "localhost",4444,"*firefox",BASE_URL);
    @BeforeClass (alwaysRun=true)
    protected void setUp()throws Exception
    {
     /*
     s.start();
     s.windowFocus();
     s.windowMaximize();
     s.windowFocus();
     */
    }
    @AfterClass(alwaysRun=true)
    protected void tearDown() throws Exception
    {
     //s.stop(); 
    }
 @DataProvider (name="TestData") 
 public Iterator createData() throws IOException{                 
 ArrayList myEntries = new ArrayList();  
 File inputWorkbook = new File("c:/jexcel.xls");   
              Workbook w;     
 String Temp1, Temp2;       
 try {         
  w = Workbook.getWorkbook(inputWorkbook);     
  Sheet sheet = w.getSheet(0);       
  for (int i = 0; i < sheet.getRows(); i++) {      
                // column, row     
  Cell cell = sheet.getCell(0, i);         
  Temp1 = cell.getContents();                 
  cell = sheet.getCell(1, i);      
  Temp2 = cell.getContents();                
  myEntries.add(new Object [] {Temp1,Temp2});       
   }      
  } 
  catch (BiffException e) 
  {e.printStackTrace();}      
  System.out.println("Successfully read data file");          
                return myEntries.iterator();          
 }    
  
 @Test(dataProvider = "TestData",groups={"test","SampleDemo"},enabled=true)    
 public void test_verifyData1(String n1,String n2) {    
  System.out.println(n1+" "+n2); }        
}
Sample excel file shown below. Always save in .xls only, as jxl currently support .xls.
Output for the above code (Look at the below screen shot)
How to place data provider in different class?
By default it will search for dataprovider in the current test class. If you want to declare the data provider in different class, specify the method as static and mention the class name in the DataProviderClass attribute.
@Test(dataProvider = "TestData",dataProviderClass="StaticData.class",groups={"test","SampleDemo"},enabled=true)
---