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..
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..
-
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;
-
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();
}
}
Really good work helped me a lot...
ReplyDeleteI'm new to selenium and need some help at work in getting text from popup which appears only on mouse over.can u send your email Id at hallgames63@gmail.com...
Hi Brahma,
ReplyDeleteNeed ur Expert guidance, want to read data from data grin in specific date range like 2014 year data only , i tried this logic but it never work .
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class DateRange {
WebDriver driver = new FirefoxDriver();
protected static HSSFWorkbook wb = new HSSFWorkbook(); // or new XSSFWorkbook();
protected static HSSFSheet sheet1 = wb.createSheet("IHSharedHeld");
@BeforeTest
public void setup() throws Exception {
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get("http://www.nasdaq.com/symbol");
driver.findElement(By.id("stock-search-text")).clear();
driver.findElement(By.id("stock-search-text")).sendKeys("AB");
driver.findElement(By.id("stock-search-submit")).click();
JavascriptExecutor jsedown = (JavascriptExecutor)driver;
jsedown.executeScript("scroll(0, 250)");
//Click on holdings link.
driver.findElement(By.id("holdingslink")).click();
System.out.println("Action should counduct once ");
Thread.sleep(3000);
}
@AfterTest
public void tearDown() throws Exception {
driver.quit();
}
@Test
public void print_data() throws Exception{
//Get number of rows In table.
int Row_count = driver.findElements(By.xpath(".//*[@id='quotes_content_left_pnlInsider']/table/tbody/tr")).size();
System.out.println("Number Of Rows = "+Row_count);
//Get number of columns In table.
int Col_count = driver.findElements(By.xpath(".//*[@id='quotes_content_left_pnlInsider']/table/tbody/tr[1]/td")).size();
System.out.println("Number Of Columns = "+Col_count);
//divided xpath In three parts to pass Row_count and Col_count values.
String first_part = ".//*[@id='quotes_content_left_pnlInsider']/table/tbody/tr[";
String second_part = "]/td[";
String third_part = "]";
//String forth_part = ".//*[@id='quotes_content_left_pnlInsider']/table/tbody/tr[]/td[2]";
String forth_part = "td[2]";
//Used for loop for number of rows.
for (int k=1; k<=Row_count; k++){
//Used for loop for number of columns.
for(int j=1; j<=3; j++){
System.out.print(forth_part +" ");
if(forth_part.matches("(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((2014)\\d\\d)")){
String final_xpath1 = first_part+k+second_part+j+third_part;
String Table_data1 = driver.findElement(By.xpath(final_xpath1)).getText();
System.out.print(Table_data1 +" ");
}
else{
System.out.println("No data Found ");
}
}
}
}
}
public enum Month {
ReplyDeletewhy it is showing error in month
Hi prativa, What type of error your getting...
ReplyDelete