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 MuchBetterJQueryDatepicker { private WebDriver frame; private WebDriver driver; 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 year) { if (displayedYear() < year) { while (displayedYear() != year) { nextMonth(); } } else if (displayedYear() > year) { while (displayedYear() != year) { previousMonth(); } } } private void pickMonth(int month) { if (displayedMonth() < month) { while (displayedMonth() != month) { nextMonth(); } } else if (displayedMonth() > month) { while (displayedMonth() != month) { previousMonth(); } } } private void pickDay(int day) { List<WebElement> tds = calendar().findElements(By.tagName("td")); for (WebElement td : tds) { if (td.getText().equals(String.valueOf(day))) { td.click(); } } } private void previousMonth() { calendar().findElement(By.className("ui-datepicker-prev")).click(); } private void nextMonth() { calendar().findElement(By.className("ui-datepicker-next")).click(); } private WebElement calendar() { return frame.findElement(By.id("ui-datepicker-div")); } private int displayedYear() { return Integer.parseInt(calendar().findElement(By.className("ui-datepicker-year")).getText()); } private int displayedMonth() { return Month.valueOf(calendar().findElement(By.className("ui-datepicker-month")).getText().toUpperCase()).ordinal(); } }