Cách chọn ngày từ DatePicker/Lịch trong Selenium webdriver

Cách xử lý lịch trong Selenium

Đối với lựa chọn Ngày giờ, HTML5 có một điều khiển mới được hiển thị bên dưới.

Xử lý Lịch trong Selenium

Trang trên có thể được truy cập ở đây: https://demo.guru99.com/test/

Nếu chúng ta thấy DOM của bộ điều khiển DateTime Picker, sẽ chỉ có một hộp nhập cho cả ngày và giờ.

Xử lý Lịch trong Selenium


Vì vậy, để xử lý loại điều khiển này, trước tiên chúng ta sẽ điền ngày mà không phân tách bằng dấu phân cách, tức là nếu ngày là 09/25/2013, thì chúng ta sẽ chuyển 09252013 vào hộp nhập. Sau khi hoàn tất, chúng ta sẽ chuyển tiêu điểm từ ngày sang giờ bằng cách nhấn 'tab' & điền giờ.

Nếu chúng ta cần điền 02:45 PM, chúng ta sẽ truyền '0245PM' vào cùng ô nhập liệu.

Mã cho datepicker trông như thế này –

import java.util.List;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.Keys;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.Test;

public class DateTimePicker {

    @Test

    public void dateTimePicker(){

        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

        WebDriver driver = new ChromeDriver();

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        driver.get("https://demo.guru99.com/test/");

        //Find the date time picker control

        WebElement dateBox = driver.findElement(By.xpath("//form//input[@name='bdaytime']"));

        //Fill date as mm/dd/yyyy as 09/25/2013

        dateBox.sendKeys("09252013");

        //Press tab to shift focus to time field

        dateBox.sendKeys(Keys.TAB);

        //Fill time as 02:45 PM

        dateBox.sendKeys("0245PM");

    }

    }


Đầu ra sẽ giống như-

Xử lý Lịch trong Selenium

Hãy xem một ví dụ khác về Lịch. Chúng tôi sẽ sử dụng điều khiển Telerik DateTimePicker. Có thể được truy cập đây

Xử lý Lịch trong Selenium

Ở đây nếu cần thay đổi tháng thì chúng ta phải bấm vào giữa tiêu đề lịch.

Xử lý Lịch trong Selenium

Tương tự, nếu chúng ta cần thay đổi năm thì chúng ta có thể thực hiện bằng cách nhấp vào liên kết tiếp theo hoặc trước đó trên công cụ chọn ngày.

Xử lý Lịch trong Selenium

Và cuối cùng để thay đổi thời gian, chúng ta có thể chọn thời gian chính xác từ danh sách thả xuống (Lưu ý: Ở đây thời gian được chọn trong khoảng cách 30 phút. Tức là 12:00, 12:30, 1:00, 1:30, v.v.).

Xử lý Lịch trong Selenium

Một ví dụ hoàn chỉnh trông giống như-

import java.util.Calendar;

import java.util.List;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.annotations.Test;

public class DatePicker {

    @Test

    public void testDAtePicker() throws Exception{

        //DAte and Time to be set in textbox

        String dateTime ="12/07/2014 2:00 PM";

        WebDriver driver = new FirefoxDriver();

        driver.manage().window().maximize();
        
        driver.get("https://demos.telerik.com/kendo-ui/datetimepicker/index");
        
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        
        //button to open calendar

        WebElement selectDate = driver.findElement(By.xpath("//span[@aria-controls='datetimepicker_dateview']"));
        
    selectDate.click();

    //button to move next in calendar

    WebElement nextLink = driver.findElement(By.xpath("//div[@id='datetimepicker_dateview']//div[@class='k-header']//a[contains(@class,'k-nav-next')]"));

    //button to click in center of calendar header

    WebElement midLink = driver.findElement(By.xpath("//div[@id='datetimepicker_dateview']//div[@class='k-header']//a[contains(@class,'k-nav-fast')]"));

    //button to move previous month in calendar

    WebElement previousLink = driver.findElement(By.xpath("//div[@id='datetimepicker_dateview']//div[@class='k-header']//a[contains(@class,'k-nav-prev')]")); 

        //Split the date time to get only the date part

        String date_dd_MM_yyyy[] = (dateTime.split(" ")[0]).split("/");

        //get the year difference between current year and year to set in calander

        int yearDiff = Integer.parseInt(date_dd_MM_yyyy[2])- Calendar.getInstance().get(Calendar.YEAR);

        midLink.click();

        if(yearDiff!=0){

            //if you have to move next year

            if(yearDiff>0){

                for(int i=0;i< yearDiff;i++){

                    System.out.println("Year Diff->"+i);

                    nextLink.click();

                }

            }

            //if you have to move previous year

            else if(yearDiff<0){

                for(int i=0;i< (yearDiff*(-1));i++){

                    System.out.println("Year Diff->"+i);

                    previousLink.click();

                }

            }

        }
        
        Thread.sleep(1000);

        //Get all months from calendar to select correct one

        List<WebElement> list_AllMonthToBook = driver.findElements(By.xpath("//div[@id='datetimepicker_dateview']//table//tbody//td[not(contains(@class,'k-other-month'))]"));
        
        list_AllMonthToBook.get(Integer.parseInt(date_dd_MM_yyyy[1])-1).click();
        
        Thread.sleep(1000);

        //get all dates from calendar to select correct one

        List<WebElement> list_AllDateToBook = driver.findElements(By.xpath("//div[@id='datetimepicker_dateview']//table//tbody//td[not(contains(@class,'k-other-month'))]"));
        
        list_AllDateToBook.get(Integer.parseInt(date_dd_MM_yyyy[0])-1).click();
        
        ///FOR TIME

        WebElement selectTime = driver.findElement(By.xpath("//span[@aria-controls='datetimepicker_timeview']"));

        //click time picker button

        selectTime.click();

        //get list of times

        List<WebElement> allTime = driver.findElements(By.xpath("//div[@data-role='popup'][contains(@style,'display: block')]//ul//li[@role='option']"));
      
        dateTime = dateTime.split(" ")[1]+" "+dateTime.split(" ")[2];

     //select correct time

        for (WebElement webElement : allTime) {

            if(webElement.getText().equalsIgnoreCase(dateTime))

            {

                webElement.click();

            }

        }

    }

}

Đầu ra sẽ như thế nào

Xử lý Lịch trong Selenium