简体   繁体   中英

How to select current date and future date in the calendar

How to select current date and future date in the calendar? 选择当前和将来的日期

I want to select June 6 and 7. When I run today below code works fine But when I run tomorrow this script will fail because 6th June will be disabled. How to select current date and future date in the calendar

List<WebElement>dates1=driver.findElements(By.xpath("//div[@class='rc-calendar-date-value']"));
int dd=dates1.size();

for(int i=0; i<dd; i++)
{
    String date=dates1.get(i).getText();
    if(date.equalsIgnoreCase(“6”))
    {
        dates1.get(i).click();
        break;
    }
}
for(int i=0; i<dd; i++)
{
    String date=dates1.get(i).getText();
    if(date.equalsIgnoreCase(“7”))
    {
        dates1.get(i).click();
        break;
    }
}

Above code will fail when you run tomorrow.

Html:

<div class="rc-calendar-body">
    <table class="rc-calendar-table" cellspacing="0" role="grid">
        <thead>
            <tr role="row">
                <th role="columnheader" title="Sun" class="rc-calendar-column-header"><span class="rc-calendar-column-header-inner">Su</span></th>
                <th role="columnheader" title="Mon" class="rc-calendar-column-header"><span class="rc-calendar-column-header-inner">Mo</span></th>
                <th role="columnheader" title="Tue" class="rc-calendar-column-header"><span class="rc-calendar-column-header-inner">Tu</span></th>
                <th role="columnheader" title="Wed" class="rc-calendar-column-header"><span class="rc-calendar-column-header-inner">We</span></th>
                <th role="columnheader" title="Thu" class="rc-calendar-column-header"><span class="rc-calendar-column-header-inner">Th</span></th>
                <th role="columnheader" title="Fri" class="rc-calendar-column-header"><span class="rc-calendar-column-header-inner">Fr</span></th>
                <th role="columnheader" title="Sat" class="rc-calendar-column-header"><span class="rc-calendar-column-header-inner">Sa</span></th>
            </tr>
        </thead>
        <tbody class="rc-calendar-tbody">
            <tr role="row" class="">
                <td role="gridcell" title="2019-5-26" class="rc-calendar-cell rc-calendar-last-month-cell rc-calendar-disabled-cell-first-of-row rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">26</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-5-27" class="rc-calendar-cell rc-calendar-last-month-cell rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">27</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-5-28" class="rc-calendar-cell rc-calendar-last-month-cell rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">28</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-5-29" class="rc-calendar-cell rc-calendar-last-month-cell rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">29</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-5-30" class="rc-calendar-cell rc-calendar-last-month-cell rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">30</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-5-31" class="rc-calendar-cell rc-calendar-last-month-cell rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">31</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-1" class="rc-calendar-cell rc-calendar-first-day-of-month-cell rc-calendar-disabled-cell-last-of-row rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">1</div>
                    </div>
                </td>
            </tr>
            <tr role="row" class="rc-calendar-current-week rc-calendar-active-week">
                <td role="gridcell" title="2019-6-2" class="rc-calendar-cell rc-calendar-disabled-cell-first-of-row rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">2</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-3" class="rc-calendar-cell rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">3</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-4" class="rc-calendar-cell rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">4</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-5" class="rc-calendar-cell rc-calendar-disabled-cell-last-of-row rc-calendar-disabled-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="true">
                        <div class="rc-calendar-date-value">5</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-6" class="rc-calendar-cell rc-calendar-today rc-calendar-first-selected-day rc-calendar-selected-day">
                    <div class="rc-calendar-date" aria-selected="true" aria-disabled="false">
                        <div class="rc-calendar-date-value">6</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-7" class="rc-calendar-cell rc-calendar-in-range-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">7</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-8" class="rc-calendar-cell rc-calendar-last-selected-day rc-calendar-selected-day">
                    <div class="rc-calendar-date" aria-selected="true" aria-disabled="false">
                        <div class="rc-calendar-date-value">8</div>
                    </div>
                </td>
            </tr>
            <tr role="row" class="">
                <td role="gridcell" title="2019-6-9" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">9</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-10" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">10</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-11" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">11</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-12" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">12</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-13" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">13</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-14" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">14</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-15" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">15</div>
                    </div>
                </td>
            </tr>
            <tr role="row" class="">
                <td role="gridcell" title="2019-6-16" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">16</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-17" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">17</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-18" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">18</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-19" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">19</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-20" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">20</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-21" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">21</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-22" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">22</div>
                    </div>
                </td>
            </tr>
            <tr role="row" class="">
                <td role="gridcell" title="2019-6-23" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">23</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-24" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">24</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-25" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">25</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-26" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">26</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-27" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">27</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-28" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">28</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-6-29" class="rc-calendar-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">29</div>
                    </div>
                </td>
            </tr>
            <tr role="row" class="">
                <td role="gridcell" title="2019-6-30" class="rc-calendar-cell rc-calendar-last-day-of-month-cell">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">30</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-7-1" class="rc-calendar-cell rc-calendar-next-month-btn-day">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">1</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-7-2" class="rc-calendar-cell rc-calendar-next-month-btn-day">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">2</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-7-3" class="rc-calendar-cell rc-calendar-next-month-btn-day">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">3</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-7-4" class="rc-calendar-cell rc-calendar-next-month-btn-day">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">4</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-7-5" class="rc-calendar-cell rc-calendar-next-month-btn-day">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">5</div>
                    </div>
                </td>
                <td role="gridcell" title="2019-7-6" class="rc-calendar-cell rc-calendar-next-month-btn-day">
                    <div class="rc-calendar-date" aria-selected="false" aria-disabled="false">
                        <div class="rc-calendar-date-value">6</div>
                    </div>
                </td>
            </tr>
        </tbody>
    </table>
</div>

Please help out on this.

Since you want to select multiple dates in the calendar, it would be a good idea to use a Page Object for Selenium:

public class DatePickerPageObject {
    [FindsBy(how = How.CSS, Using = "table.rc-calendar-table")]
    private WebElement table;

    private SimpleDateFormat calendarDateFormat;

    public DatePicker(WebDriver driver) {
        calendarDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        PageFactory.initElements(driver, this);
    }

    public void chooseDate(Date dateToChoose) {
        String xpath = "./tbody/td[@title = '" + calendarDateFormat.format(date) + "']";
        WebElement dateCell = table.findElement(By.xpath(xpath);

        dateCell.click();
    }

    public void chooseTodayAndTomorrow() {
        Date today = new Date();
        Calendar calendar = Calendar.getInstance();

        calendar.setTime(today);
        calendar.add(1);
        Date tomorrow = calendar.getTime();

        chooseDate(today);
        chooseDate(tomorrow);
    }
}

This at least hides the complexity of generating "today" and "tomorrow" as proper Date objects, and then selecting them in the calendar widget on the page.

Then using the date picker is trivial:

DatePickerPageObject datePicker = new DatePickerPageObject(driver);

datePicker.chooseTodayAndTomorrow();

The nice thing about creating a class that is responsible for this behavior, besides hiding the complexity of interacting with a date picker, is the ability to add methods to this class later on that are capable of more complicated behavior, like selecting a larger range of dates, as an example:

Date today = new Date();
Calendar calendar = Calendar.getInstance();

calendar.setTime(today);
calendar.add(7);
Date oneWeekFromToday= calendar.getTime();

datePicker.chooseRange(today, oneWeekFromToday);

(But I will leave this up to you to implement)

First you have to get the Current date and pass the date instead of passing static values. Just add current_date+1 and then run the code for future value.

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
Date date1 = new Date(); 
String date2=formatter.format(date1);
date = new SimpleDateFormat("d").parse(date2);
String currentDate = new SimpleDateFormat("d",Locale.getDefault()).format(date);

In the above code you will get the current date. and then you can select the current date

for (int i=0; i<dd; i++) {
    String date=dates1.get(i).getText();
    if(date.equalsIgnoreCase(currentDate)) {
        dates1.get(i).click();
        break;
    }
}

Now the code for future date will be

int FutureDate=currentDate+1;
for (int i=0; i<dd; i++) {
    String date=dates1.get(i).getText();
    if(date.equalsIgnoreCase(FutureDate)) {
        dates1.get(i).click();
        break;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM