Hello Folks,

In this post we will see a very important topic “Handling calendar in Selenium”.

  • We always see some input boxes where we need to select date from calendar widget. When we click on that input box, a calendar widget gets open and we need to select proper date value from that widget.
  • You can see different types of calendar widget varying across applications. For example:

MakeMyTrip.com:

Jquery Type 1:

Jquery Type 2:

  • Since every application uses different types of calendars, so it becomes little confusing and difficult to Selenium people to select date from it. You can not write a reusable method easily which can be used to handle all types of calendar.
  • Examples shown above are mostly used in applications. So I will explain handling of above calendars in this post. You can use the same logic for other types of calendar as well.

 



Understanding Calendar HTML:

There are so many types of calendar but there are something common across all types. We must know those common points about calendars.

  • Maximum calendars are a table which consists of rows and tables. Generally week will be created with “tr” and dates will “td”.

 

  • “Class” attribute for “td” tag gives more information about if date is past, current , weekend or upcoming. Refer below image, You will see the class name is different.
  • Red marked column is past date.
  • Yellow marked column is current date.
  • Green marked column is week-end.
  • Blue marked column is future date.

  • Every td will have attributes which is “data-month” and “data-year” which gives information about month and year to which td belongs. For example: “data-month” as 2 means day belongs to March month.

Handling MakeMyTrip’s calendar:

Logic:

  1. We will take Year, Month and day from user.
  2. First we will get year in first month(left hand side). If year is not matching with desired year, we will click on next till we get desired year. For example: If I need to select 2018, and current year is 2017, we will keep clicking of next button till we get year as 2018.
  3. Once we get desired year, we need to get desired month. We will retrieve month value from left most month and if month is not matching with desired month, we will keep clicking on Next button till we get desired month. For example: If current month is September and desired month is November. We will click on Next button till we get month November in left most month.
  4. The major step is finding valid dates of desired month. We should filter past dates and dates of other months. We should also filter empty date columns.
  5. Java has a number for each month of year which is equal to actual position of month-1. For example: Java month number for March will be 3-1=2.
  6. Using java month number, we can filter dates from other months.

Java Code:

Output:

You can customize and add more validation for proper valid dates. But whatever you want to do, above logic will help you in selecting date.

In upcoming posts, we will see other two types of calendar.

If you have any doubt, feel free to ask here.

If you like my posts, please like, comment, share and subscribe.

#ThanksForReading

#HappySelenium

6 thoughts on “How To Handle Different Types Of Calendars In Selenium: Part 1

  1. It doesnt work as you suggested here. I was trying to select from and to in makemytrip but that also doesnt work.
    Select FromDD=new Select(driver.findElement(By.xpath(“//input[@id=’hp-widget__sfrom’]”)));
    FromDD.selectByIndex(5);

  2. Hi, I observed one calendar on a website which is not inspect-able. Please let me know how to handle calendar which is not inspect-able ( unable to locate date /month/year to handle this calendar ).

Leave a Reply