package com.algocrafts.chapter13; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import java.time.Month; import java.util.Date; import java.util.List; public class BetterJQueryDatepicker { private WebDriver frame; private WebDriver driver; private WebElement datepicker; public String pickDate(Date date) { driver = new ChromeDriver(); driver.get("http://jqueryui.com/datepicker"); show(); pickYear(date.getYear() + 1900); pickMonth(date.getMonth()); pickDay(date.getDay() + 1); return frame.findElement(By.id("datepicker")).getAttribute("value"); } private void show() { frame = driver.switchTo().frame(0); WebElement element = frame.findElement(By.id("datepicker")); element.click(); } private void pickYear(int yearInt) { datepicker = frame.findElement(By.id("ui-datepicker-div")); String year = datepicker.findElement(By.className("ui-datepicker-year")).getText(); if (Integer.parseInt(year) < yearInt) { while (Integer.parseInt(year) != yearInt) { datepicker.findElement(By.className("ui-datepicker-next")).click(); datepicker = frame.findElement(By.id("datepicker")); year = datepicker.findElement(By.className("ui-datepicker-year")).getText(); } } else if (Integer.parseInt(year) > yearInt) { while (Integer.parseInt(year) != yearInt) { datepicker.findElement(By.className("ui-datepicker-prev")).click(); datepicker = frame.findElement(By.id("ui-datepicker-div")); year = datepicker.findElement(By.className("ui-datepicker-year")).getText(); } } } private void pickMonth(int month1) { String month = datepicker.findElement(By.className("ui-datepicker-month")).getText(); if (Month.valueOf(month.toUpperCase()).ordinal() < month1) { while (Month.valueOf(month.toUpperCase()).ordinal() != month1) { datepicker.findElement(By.className("ui-datepicker-next")).click(); datepicker = frame.findElement(By.id("ui-datepicker-div")); month = datepicker.findElement(By.className("ui-datepicker-month")).getText(); } } else if (Month.valueOf(month.toUpperCase()).ordinal() > month1) { while (Month.valueOf(month.toUpperCase()).ordinal() != month1) { datepicker.findElement(By.className("ui-datepicker-prev")).click(); datepicker = frame.findElement(By.id("ui-datepicker-div")); month = datepicker.findElement(By.className("ui-datepicker-month")).getText(); } } } private void pickDay(int day) { List<WebElement> tds = datepicker.findElements(By.tagName("td")); for (WebElement td : tds) { if (td.getText().equals(String.valueOf(day))) { td.click(); } } } }