Sunday 23 June 2013

Window Handling & Drop down Method in WebDriver



package window;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class WindowHandling {

    public static void main(String[] args) throws InterruptedException
    {
                    WebDriver driver=new FirefoxDriver();
                    driver.get("https://www.irctc.co.in/");
                    driver.findElement(By.linkText("Hotels")).click();
                    //==================window handling method======================
                    Set<String> winhandle=driver.getWindowHandles();
               
                    //====================Getting id from all window=============
                    Iterator<String> it=winhandle.iterator();
                    String Parentwin=it.next();
                    String ChildWin=it.next();
                    driver.switchTo().window(ChildWin);
                    driver.findElement(By.xpath("//img[@alt='Ginger Hotel']")).click();
                    Thread.sleep(3000);
                    Set<String> winhandle1=driver.getWindowHandles();
                    Iterator<String> it1=winhandle1.iterator();
                    Parentwin=it1.next();
                    ChildWin=it1.next();
                    String SubChildWin=it1.next();
                    driver.switchTo().window(SubChildWin);
                    driver.findElement(By.cssSelector("#air_fromrowed > a > img")).click();
                    driver.findElement(By.linkText("29")).click();
                    driver.findElement(By.cssSelector("#air_fromrowed1 > a > img")).click();
                    driver.findElement(By.linkText("6")).click();
                    driver.findElement(By.linkText("6")).click();
                    driver.findElement(By.cssSelector("input.grbtn")).click();
                    Thread.sleep(3000);
                  
                    driver.findElement(By.id("roomType0")).click();
                    Select sel=new Select(driver.findElement(By.id("noOfRooms0")));
                    List<WebElement> lst=sel.getOptions();
                    System.out.println(lst.size());
                    for(int i=0;i<lst.size();i++)
                    {
                                  String Roomno=lst.get(i).getText();
                                 if(Roomno.equals("1"))
                                 {
                                     sel.selectByIndex(i);
                                 }
                    }
                    }
}

Tuesday 18 June 2013

Code for XLS Reader

package sample;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFHyperlink;
    import org.apache.poi.hssf.util.HSSFColor;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;

    import org.apache.poi.ss.usermodel.IndexedColors;
    import org.apache.poi.xssf.usermodel.*;


    import java.io.*;
    import java.util.Calendar;


    public class Xls_Reader {
        public static String filename = System.getProperty("user.dir")+"\\src\\config\\testcases\\TestData.xlsx";
        public  String path;
        public  FileInputStream fis = null;
        public  FileOutputStream fileOut =null;
        private XSSFWorkbook workbook = null;
        private XSSFSheet sheet = null;
        private XSSFRow row   =null;
        private XSSFCell cell = null;
       
        public Xls_Reader(String path) {
           
            this.path=path;
            try {
                fis = new FileInputStream(path);
                workbook = new XSSFWorkbook(fis);
                sheet = workbook.getSheetAt(0);
                fis.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
        }
        // returns the row count in a sheet
        public int getRowCount(String sheetName){
            int index = workbook.getSheetIndex(sheetName);
            if(index==-1)
                return 0;
            else{
            sheet = workbook.getSheetAt(index);
            int number=sheet.getLastRowNum()+1;
            return number;
            }
           
        }
       
        // returns the data from a cell
        public String getCellData(String sheetName,String colName,int rowNum){
            try{
                if(rowNum <=0)
                    return "";
           
            int index = workbook.getSheetIndex(sheetName);
            int col_Num=-1;
            if(index==-1)
                return "";
           
            sheet = workbook.getSheetAt(index);
            row=sheet.getRow(0);
            for(int i=0;i<row.getLastCellNum();i++){
                //System.out.println(row.getCell(i).getStringCellValue().trim());
                if(row.getCell(i).getStringCellValue().trim().equals(colName.trim()))
                    col_Num=i;
            }
            if(col_Num==-1)
                return "";
           
            sheet = workbook.getSheetAt(index);
            row = sheet.getRow(rowNum-1);
            if(row==null)
                return "";
            cell = row.getCell(col_Num);
           
            if(cell==null)
                return "";
            //System.out.println(cell.getCellType());
            if(cell.getCellType()==Cell.CELL_TYPE_STRING)
                  return cell.getStringCellValue();
            else if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC || cell.getCellType()==Cell.CELL_TYPE_FORMULA ){
                 
                  String cellText  = String.valueOf(cell.getNumericCellValue());
                  if (HSSFDateUtil.isCellDateFormatted(cell)) {
                       // format in form of M/D/YY
                      double d = cell.getNumericCellValue();

                      Calendar cal =Calendar.getInstance();
                      cal.setTime(HSSFDateUtil.getJavaDate(d));
                        cellText =
                         (String.valueOf(cal.get(Calendar.YEAR))).substring(2);
                       cellText = cal.get(Calendar.DAY_OF_MONTH) + "/" +
                                  cal.get(Calendar.MONTH)+1 + "/" +
                                  cellText;
                      
                       //System.out.println(cellText);

                     }

                 
                 
                  return cellText;
              }else if(cell.getCellType()==Cell.CELL_TYPE_BLANK)
                  return "";
              else
                  return String.valueOf(cell.getBooleanCellValue());
           
            }
            catch(Exception e){
               
                e.printStackTrace();
                return "row "+rowNum+" or column "+colName +" does not exist in xls";
            }
        }
       
        // returns the data from a cell
        public String getCellData(String sheetName,int colNum,int rowNum){
            try{
                if(rowNum <=0)
                    return "";
           
            int index = workbook.getSheetIndex(sheetName);

            if(index==-1)
                return "";
           
       
            sheet = workbook.getSheetAt(index);
            row = sheet.getRow(rowNum-1);
            if(row==null)
                return "";
            cell = row.getCell(colNum);
            if(cell==null)
                return "";
           
          if(cell.getCellType()==Cell.CELL_TYPE_STRING)
              return cell.getStringCellValue();
          else if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC || cell.getCellType()==Cell.CELL_TYPE_FORMULA ){
             
              String cellText  = String.valueOf(cell.getNumericCellValue());
              if (HSSFDateUtil.isCellDateFormatted(cell)) {
                   // format in form of M/D/YY
                  double d = cell.getNumericCellValue();

                  Calendar cal =Calendar.getInstance();
                  cal.setTime(HSSFDateUtil.getJavaDate(d));
                    cellText =
                     (String.valueOf(cal.get(Calendar.YEAR))).substring(2);
                   cellText = cal.get(Calendar.MONTH)+1 + "/" +
                              cal.get(Calendar.DAY_OF_MONTH) + "/" +
                              cellText;
                  
                  // System.out.println(cellText);

                 }

             
             
              return cellText;
          }else if(cell.getCellType()==Cell.CELL_TYPE_BLANK)
              return "";
          else
              return String.valueOf(cell.getBooleanCellValue());
            }
            catch(Exception e){
               
                e.printStackTrace();
                return "row "+rowNum+" or column "+colNum +" does not exist  in xls";
            }
        }
       
        // returns true if data is set successfully else false
        public boolean setCellData(String sheetName,String colName,int rowNum, String data){
            try{
            fis = new FileInputStream(path);
            workbook = new XSSFWorkbook(fis);

            if(rowNum<=0)
                return false;
           
            int index = workbook.getSheetIndex(sheetName);
            int colNum=-1;
            if(index==-1)
                return false;
           
           
            sheet = workbook.getSheetAt(index);
           

            row=sheet.getRow(0);
            for(int i=0;i<row.getLastCellNum();i++){
                //System.out.println(row.getCell(i).getStringCellValue().trim());
                if(row.getCell(i).getStringCellValue().trim().equals(colName))
                    colNum=i;
            }
            if(colNum==-1)
                return false;

            sheet.autoSizeColumn(colNum);
            row = sheet.getRow(rowNum-1);
            if (row == null)
                row = sheet.createRow(rowNum-1);
           
            cell = row.getCell(colNum);   
            if (cell == null)
                cell = row.createCell(colNum);

            // cell style
            //CellStyle cs = workbook.createCellStyle();
            //cs.setWrapText(true);
            //cell.setCellStyle(cs);
            cell.setCellValue(data);

            fileOut = new FileOutputStream(path);

            workbook.write(fileOut);

            fileOut.close();   

            }
            catch(Exception e){
                e.printStackTrace();
                return false;
            }
            return true;
        }
       
       
        // returns true if data is set successfully else false
        public boolean setCellData(String sheetName,String colName,int rowNum, String data,String url){
            //System.out.println("setCellData setCellData******************");
            try{
            fis = new FileInputStream(path);
            workbook = new XSSFWorkbook(fis);

            if(rowNum<=0)
                return false;
           
            int index = workbook.getSheetIndex(sheetName);
            int colNum=-1;
            if(index==-1)
                return false;
           
           
            sheet = workbook.getSheetAt(index);
            //System.out.println("A");
            row=sheet.getRow(0);
            for(int i=0;i<row.getLastCellNum();i++){
                //System.out.println(row.getCell(i).getStringCellValue().trim());
                if(row.getCell(i).getStringCellValue().trim().equalsIgnoreCase(colName))
                    colNum=i;
            }
           
            if(colNum==-1)
                return false;
            sheet.autoSizeColumn(colNum); //ashish
            row = sheet.getRow(rowNum-1);
            if (row == null)
                row = sheet.createRow(rowNum-1);
           
            cell = row.getCell(colNum);   
            if (cell == null)
                cell = row.createCell(colNum);
               
            cell.setCellValue(data);
            XSSFCreationHelper createHelper = workbook.getCreationHelper();

            //cell style for hyperlinks
            //by default hypelrinks are blue and underlined
            CellStyle hlink_style = workbook.createCellStyle();
            XSSFFont hlink_font = workbook.createFont();
            hlink_font.setUnderline(XSSFFont.U_SINGLE);
            hlink_font.setColor(IndexedColors.BLUE.getIndex());
            hlink_style.setFont(hlink_font);
            //hlink_style.setWrapText(true);

            XSSFHyperlink link = createHelper.createHyperlink(XSSFHyperlink.LINK_FILE);
            link.setAddress(url);
            cell.setHyperlink(link);
            cell.setCellStyle(hlink_style);
             
            fileOut = new FileOutputStream(path);
            workbook.write(fileOut);

            fileOut.close();   

            }
            catch(Exception e){
                e.printStackTrace();
                return false;
            }
            return true;
        }
       
       
       
        // returns true if sheet is created successfully else false
        public boolean addSheet(String  sheetname){       
           
            FileOutputStream fileOut;
            try {
                 workbook.createSheet(sheetname);   
                 fileOut = new FileOutputStream(path);
                 workbook.write(fileOut);
                 fileOut.close();           
            } catch (Exception e) {           
                e.printStackTrace();
                return false;
            }
            return true;
        }
       
        // returns true if sheet is removed successfully else false if sheet does not exist
        public boolean removeSheet(String sheetName){       
            int index = workbook.getSheetIndex(sheetName);
            if(index==-1)
                return false;
           
            FileOutputStream fileOut;
            try {
                workbook.removeSheetAt(index);
                fileOut = new FileOutputStream(path);
                workbook.write(fileOut);
                fileOut.close();           
            } catch (Exception e) {           
                e.printStackTrace();
                return false;
            }
            return true;
        }
        // returns true if column is created successfully
        public boolean addColumn(String sheetName,String colName){
            //System.out.println("**************addColumn*********************");
           
            try{               
                fis = new FileInputStream(path);
                workbook = new XSSFWorkbook(fis);
                int index = workbook.getSheetIndex(sheetName);
                if(index==-1)
                    return false;
               
            XSSFCellStyle style = workbook.createCellStyle();
            style.setFillForegroundColor(HSSFColor.GREY_40_PERCENT.index);
            style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
           
            sheet=workbook.getSheetAt(index);
           
            row = sheet.getRow(0);
            if (row == null)
                row = sheet.createRow(0);
           
            //cell = row.getCell();   
            //if (cell == null)
            //System.out.println(row.getLastCellNum());
            if(row.getLastCellNum() == -1)
                cell = row.createCell(0);
            else
                cell = row.createCell(row.getLastCellNum());
               
                cell.setCellValue(colName);
                cell.setCellStyle(style);
               
                fileOut = new FileOutputStream(path);
                workbook.write(fileOut);
                fileOut.close();           

            }catch(Exception e){
                e.printStackTrace();
                return false;
            }
           
            return true;
           
           
        }
        // removes a column and all the contents
        public boolean removeColumn(String sheetName, int colNum) {
            try{
            if(!isSheetExist(sheetName))
                return false;
            fis = new FileInputStream(path);
            workbook = new XSSFWorkbook(fis);
            sheet=workbook.getSheet(sheetName);
            XSSFCellStyle style = workbook.createCellStyle();
            style.setFillForegroundColor(HSSFColor.GREY_40_PERCENT.index);
            XSSFCreationHelper createHelper = workbook.getCreationHelper();
            style.setFillPattern(HSSFCellStyle.NO_FILL);
           
           
       
            for(int i =0;i<getRowCount(sheetName);i++){
                row=sheet.getRow(i);   
                if(row!=null){
                    cell=row.getCell(colNum);
                    if(cell!=null){
                        cell.setCellStyle(style);
                        row.removeCell(cell);
                    }
                }
            }
            fileOut = new FileOutputStream(path);
            workbook.write(fileOut);
            fileOut.close();
            }
            catch(Exception e){
                e.printStackTrace();
                return false;
            }
            return true;
           
        }
      // find whether sheets exists   
        public boolean isSheetExist(String sheetName){
            int index = workbook.getSheetIndex(sheetName);
            if(index==-1){
                index=workbook.getSheetIndex(sheetName.toUpperCase());
                    if(index==-1)
                        return false;
                    else
                        return true;
            }
            else
                return true;
        }
       
        // returns number of columns in a sheet   
        public int getColumnCount(String sheetName){
            // check if sheet exists
            if(!isSheetExist(sheetName))
             return -1;
           
            sheet = workbook.getSheet(sheetName);
            row = sheet.getRow(0);
           
            if(row==null)
                return -1;
           
            return row.getLastCellNum();
           
           
           
        }
        //String sheetName, String testCaseName,String keyword ,String URL,String message
        public boolean addHyperLink(String sheetName,String screenShotColName,String testCaseName,int index,String url,String message){
            //System.out.println("ADDING addHyperLink******************");
           
            url=url.replace('\\', '/');
            if(!isSheetExist(sheetName))
                 return false;
           
            sheet = workbook.getSheet(sheetName);
           
            for(int i=2;i<=getRowCount(sheetName);i++){
                if(getCellData(sheetName, 0, i).equalsIgnoreCase(testCaseName)){
                    //System.out.println("**caught "+(i+index));
                    setCellData(sheetName, screenShotColName, i+index, message,url);
                    break;
                }
            }


            return true;
        }
        public int getCellRowNum(String sheetName,String colName,String cellValue){
           
            for(int i=2;i<=getRowCount(sheetName);i++){
                if(getCellData(sheetName,colName , i).equalsIgnoreCase(cellValue)){
                    return i;
                }
            }
            return -1;
           
        }
           
        // to run this on stand alone
        public static void main(String arg[]) throws IOException{
           
            //System.out.println(filename);
            Xls_Reader datatable = null;
           

                 datatable = new Xls_Reader("H:\\Student_Selenium_Workspaces\\Framework_Weekend\\src\\Framework_XL_Files\\Controller.xlsx");
                    for(int col=0 ;col< datatable.getColumnCount("TC5"); col++){
                        System.out.println(datatable.getCellData("TC5", col, 1));
                    }
        }
       
       
    }



Thursday 13 June 2013

Selecting a date from Datepicker using Selenium WebDriver

Calendars look pretty and of course they are fancy too.So now a days most of the websites are using advanced j Query Date pickers instead of displaying individual dropdowns for month,day,year.

 Datepicker




If we look at the Datepicker, it is just a like a table with set of rows and columns.To select a date ,we just have to navigate to the cell where our desired date is present.

Here is a sample code on how to pick a 13th date from the next month.


  1. import java.util.List;  
  2. import java.util.List;  
  3. import java.util.concurrent.TimeUnit;  
  4. import org.openqa.selenium.By;  
  5. import org.openqa.selenium.WebDriver;  
  6. import org.openqa.selenium.WebElement;  
  7. import org.openqa.selenium.firefox.FirefoxDriver;  
  8. import org.testng.annotations.BeforeTest;  
  9. import org.testng.annotations.Test;;  
  10.   
  11. public class DatePicker {  
  12.   
  13.  WebDriver driver;  
  14.    
  15.  @BeforeTest  
  16.  public void start(){  
  17.  System.setProperty("webdriver.firefox.bin""C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");    
  18.  driver = new FirefoxDriver();  
  19.  }  
  20.    
  21.  @Test  
  22.  public void Test(){  
  23.    
  24.   driver.get("http://jqueryui.com/datepicker/");  
  25.   driver.switchTo().frame(0);  
  26.   driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);  
  27.   //Click on textbox so that datepicker will come  
  28.   driver.findElement(By.id("datepicker")).click();  
  29.   driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);  
  30.   //Click on next so that we will be in next month  
  31.   driver.findElement(By.xpath(".//*[@id='ui-datepicker-div']/div/a[2]/span")).click();  
  32.     
  33.   /*DatePicker is a table.So navigate to each cell   
  34.    * If a particular cell matches value 13 then select it  
  35.    */  
  36.   WebElement dateWidget = driver.findElement(By.id("ui-datepicker-div"));  
  37.   List<webelement> rows=dateWidget.findElements(By.tagName("tr"));  
  38.   List<webelement> columns=dateWidget.findElements(By.tagName("td"));  
  39.     
  40.   for (WebElement cell: columns){  
  41.    //Select 13th Date   
  42.    if (cell.getText().equals("13")){  
  43.    cell.findElement(By.linkText("13")).click();  
  44.    break;  
  45.    }  
  46.   }   
  47.  }  
  48. }</webelement></webelement> 

 Source - mythoughts

Selenium WebDriver : findElement() Vs findElements() functions



It is very important to know the difference between findElement() and findElements() functions and here you go for it :

findElement() :

  1. Find the first element within the current page using the given "locating mechanism".
  2. Returns a single WebElement.
  3. Syntax: WebElement findElement(By by)

Ex:
  1. driver.get("https://signup.live.com");  
  2. WebElement firstName=driver.findElement(By.id("iFirstName"));  
  3. firstName.sendKeys("Automated First Name");  


findElements() :

  1. Find all elements within the current page using the given "locating mechanism".
  2. Returns List of WebElements.
  3. Syntax:  java.util.List<WebElement> findElements(By by)

Ex:
  1. driver.get("https://signup.live.com");  
  2. List <webelement> textboxes1=driver.findElements(By.xpath("//input[@type='text']"));  
  3. System.out.println("total textboxes "+textboxes1.size());  
  4.   
  5. </webelement>