Date picker strategies in Selenium Java - Build an Automation Script
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.time.Duration; public class DatePickerTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); try { driver.get("https://example.com/date-picker"); // Locate the date picker input field by id WebElement dateInput = wait.until(ExpectedConditions.elementToBeClickable(By.id("datePickerInput"))); // Click to open the date picker widget dateInput.click(); // Wait for the calendar widget to be visible WebElement calendarWidget = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("calendarWidget"))); // Navigate to the desired month and year if needed // For simplicity, assume current month is correct // Select the 15th day WebElement day15 = calendarWidget.findElement(By.xpath(".//td[@data-day='15']")); day15.click(); // Verify the input field value is updated to 15th (format: yyyy-MM-dd) String selectedDate = dateInput.getAttribute("value"); if (!selectedDate.equals("2024-06-15")) { throw new AssertionError("Date picker input value mismatch. Expected: 2024-06-15, Found: " + selectedDate); } System.out.println("Test Passed: Date selected correctly."); } finally { driver.quit(); } } }
This test script uses Selenium WebDriver with Java to automate selecting a date from a date picker widget.
First, it opens the web page and waits until the date picker input field is clickable. Then it clicks the input to open the calendar widget and waits for the calendar to appear.
It selects the 15th day by locating the calendar cell with a data attribute for day 15. After clicking the date, it verifies that the input field's value matches the expected date string.
Explicit waits ensure elements are ready before interacting, avoiding flaky tests. Using meaningful locators like id and data attributes makes the test more stable. The test ends by closing the browser.
Now add data-driven testing to select three different dates: 5th, 15th, and 25th of the current month.
Practice
Solution
Step 1: Understand the purpose of a date picker
A date picker helps users select dates without typing, reducing errors.Step 2: Identify the testing goal
Testing ensures the date picker works correctly and inputs valid dates.Final Answer:
To allow users to select a date easily and avoid manual input errors -> Option BQuick Check:
Date picker purpose = Easy date selection [OK]
- Confusing date picker with unrelated UI elements
- Thinking date picker changes page speed
- Assuming date picker validates passwords
Solution
Step 1: Identify the locator strategy for id
Use By.id("dateInput") to find element by its id attribute.Step 2: Use click() method on the found element
Calling click() simulates user clicking the date picker input.Final Answer:
driver.findElement(By.id("dateInput")).click(); -> Option DQuick Check:
Use By.id for id attribute [OK]
- Using By.name when id is given
- Using By.className incorrectly
- Using By.tagName with id value
WebElement dateInput = driver.findElement(By.id("dateInput"));
dateInput.click();
dateInput.sendKeys("2024-07-15");
String selectedDate = dateInput.getAttribute("value");
System.out.println(selectedDate);Solution
Step 1: Understand sendKeys sets input value
sendKeys("2024-07-15") inputs the date string into the field.Step 2: getAttribute("value") retrieves the current input value
This returns the exact string typed, which is "2024-07-15".Final Answer:
2024-07-15 -> Option CQuick Check:
sendKeys sets value, getAttribute reads it [OK]
- Expecting formatted date different from input
- Assuming getText() returns input value
- Confusing null with empty string
driver.findElement(By.xpath("//input[@id='dateInput']")).sendKeys("2024-12-01");
What is the most likely cause and fix?Solution
Step 1: Understand NoSuchElementException means element not found
This often happens if element is inside an iframe or not visible yet.Step 2: Check if date picker is inside iframe and switch context
Switching to iframe with driver.switchTo().frame(...) allows access to elements inside it.Final Answer:
The date picker input is inside an iframe; switch to iframe before accessing it -> Option AQuick Check:
Switch to iframe to find elements inside [OK]
- Assuming xpath is always wrong
- Thinking sendKeys can't be used on inputs
- Blaming date format for element not found
Solution
Step 1: Calculate the date 10 days from today in Java
Use LocalDate.now().plusDays(10) to get the target date.Step 2: Open the date picker and click the day matching the target date
Locate the day button by text or attribute and click it to select.Final Answer:
Calculate the target date, open the date picker, then click the day button matching that date -> Option AQuick Check:
Click matching day for pickers without typing [OK]
- Trying to type date when input disallows it
- Ignoring date calculation and clicking wrong day
- Using JavaScript to set value without UI interaction
Ready to prove it?
Pass the test and this pattern moves unknown
