How to select the Date Picker In Selenium WebDriver

后端 未结 8 1862
再見小時候
再見小時候 2020-12-03 00:02

Currently working on Selenium WebDriver and using Java. I want to select values in date range from the drop down.. I want to k

8条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-03 00:40

    Do not inject javascript. That is a bad practice.

    I would model the DatePicker as an element like textbox / select as shown below.

    For the detailed answer - check here- http://www.testautomationguru.com/selenium-webdriver-automating-custom-controls-datepicker/

    public class DatePicker {
    
        private static final String dateFormat = "dd MMM yyyy";
    
        @FindBy(css = "a.ui-datepicker-prev")
        private WebElement prev;
    
        @FindBy(css = "a.ui-datepicker-next")
        private WebElement next;
    
        @FindBy(css = "div.ui-datepicker-title")
        private WebElement curDate;
    
        @FindBy(css = "a.ui-state-default")
        private List < WebElement > dates;
    
        public void setDate(String date) {
    
            long diff = this.getDateDifferenceInMonths(date);
            int day = this.getDay(date);
    
            WebElement arrow = diff >= 0 ? next : prev;
            diff = Math.abs(diff);
    
            //click the arrows
            for (int i = 0; i < diff; i++)
                arrow.click();
    
            //select the date
            dates.stream()
                .filter(ele - > Integer.parseInt(ele.getText()) == day)
                .findFirst()
                .ifPresent(ele - > ele.click());
    
        }
    
        private int getDay(String date) {
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern(dateFormat);
            LocalDate dpToDate = LocalDate.parse(date, dtf);
            return dpToDate.getDayOfMonth();
        }
    
        private long getDateDifferenceInMonths(String date) {
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern(dateFormat);
            LocalDate dpCurDate = LocalDate.parse("01 " + this.getCurrentMonthFromDatePicker(), dtf);
            LocalDate dpToDate = LocalDate.parse(date, dtf);
            return YearMonth.from(dpCurDate).until(dpToDate, ChronoUnit.MONTHS);
        }
    
        private String getCurrentMonthFromDatePicker() {
            return this.curDate.getText();
        }
    
    }
    

提交回复
热议问题