Friday, 10 October 2014

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 advancedjQuery Datepickers instead of displaying individual dropdowns for month,day,year. :P
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.

Step 1:  Here I am taking Sample Website "http://www.cleartrip.com/"
step 2:  Here we can able to select date whatever we want( This is pure dynamic)
step 3:  Here I am Implementing all my logic in 'genericDatePicker()' Method. This method i am   passing date(date format should be dd/mm/yyyy).
step 4: Here First I am Clicking Calendar field and then i am getting Month/Year.
Step 5: I have written Enum method(I am assigning Number to every Month)
Step 6: After that I am calculating total months.
Step 7: Finally I am Clicking the Date From DatePicker..

Here is a sample code on how to pick a 26/10/2016..

  1. package com.utility;

    import java.util.List;

    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver; 
  2. public class RedBus {
      WebDriver driver;
    @Before
    public void setUp() throws Exception {
    driver = new FirefoxDriver();
    driver.get("http://www.cleartrip.com/");
    driver.manage().window().maximize();
    }

    @Test
    public  void datePicker(){
    genericDatePicker("26/09/2016");  //date format should be dd/mm/yy
    }

    public  void genericDatePicker(String inputDate){
    /* CLicking the Date Feild*/
    WebElement ele =driver.findElement(By.id("DepartDate"));  
    ele.click();
    /*Here we are getting Month and Year */
    String month = driver.findElement(By.xpath("//div[@class='monthBlock first']/div[1]//span[1]")).getText();
    String year = driver.findElement(By.xpath("//div[@class='monthBlock first']/div[1]//span[2]")).getText();
    System.out.println("Application month : "+month + " Year :"+year);
    int monthNum = getMonthNum(month);
    System.out.println("Enum Num : "+monthNum);
    String[] parts = inputDate.split("/");   // Here I am Spliting Our Input String Value
    //Here I am Implementing the Logic
    int noOfHits = ((Integer.parseInt(parts[2])-Integer.parseInt(year))*12)+(Integer.parseInt(parts[1])-monthNum);
    System.out.println("No OF Hits "+noOfHits);
    for(int i=0; i< noOfHits;i++){
    driver.findElement(By.className("nextMonth ")).click();
    }
    /* selecting the month div*/
    List<WebElement> cals=driver.findElements(By.xpath("//div[@class='monthBlock first']//tr"));
    System.out.println(cals.size());
    /*iterating the "tr" list*/
    for( WebElement daterow : cals){
    /*getting the all "td" s*/
    List<WebElement> datenums = daterow.findElements(By.xpath("//td"));
    /*iterating the "td" list*/
    for(WebElement date : datenums ){
    /* Checking The our input Date(if it match go inside and click*/
    if(date.getText().equalsIgnoreCase(parts[0])){
    date.click();
    break;
    }
    }
    }
    }

    // This method will return Month Number
    public  int getMonthNum(String month){
    for (Month mName : Month.values()) {
    if(mName.name().equalsIgnoreCase(month))
    return mName.value;
    }
    return -1;
    }

    // Here I am Creating Enum Method(I am assigning Number to every Month)
    public enum Month {
    January(1), February(2), March(3), April(4), May(5), June(6) , July(7), August(8), September(9), October(10), November(11),December(12);
    private int value;

    private Month(int value) {
    this.value = value;
    }

    }

      @After
    public void tearDown() throws Exception {
    driver.quit();
    }


    }

Wednesday, 8 October 2014

Handling dynamically generated ids in selenium webdriver

Step 1: Here I am trying to automate testing of a webpage that contains list of items. User input item is selected and is deleted. Here, I need to select BR2 and delete that item.

<div id="virtual_domains-content">
    <div class="columns">
        <div class="left-column">
            <h2>Virtual Domains</h2>
                <div class="search-row">
                    <div class="box scrolling list-editable">
                        <div id="virtual_domains-list" class="list-view">
                            <div id="virtual_domains-list-11" class="list-item-view">
                                <div class="content"> BR1</div>
                            </div>
                            <div id="virtual_domains-list-35" class="list-item-view">
                                <div class="content"> BR2</div>
                            </div>
                        </div>
                    </div>

Step 2:In the above code  contains class name.So,I am using  class name.

List<WebElement> list =driver.find_element_by_class_name("list-item-view");
for(WebElement option : list){
    System.out.println(option.getText());
    if(option.getText().equals("BR2")) {
        option.click();
        break;
    }

}

Angular JS Protractor Installation process - Tutorial Part 1

                     Protractor, formally known as E2E testing framework, is an open source functional automation framework designed spe...