Cách chọn ngày từ DatePicker / Calendar trong Selenium Webdriver
Đối với lựa chọn DateTime, HTML5 có một điều khiển mới được hiển thị bên dưới.

Trang trên có thể được truy cập tại đây
Nếu chúng ta thấy DOM của điều khiển DateTime Picker, sẽ chỉ có một hộp nhập cho cả ngày và giờ.
- [SHOCK] Chú gấu tuổi thơ Winnie the Pooh sẽ được làm phim kinh dị
- Cách tạo và xem ID, Username Zalo
- Mức lương tối thiểu giờ năm 2022
- Free Fire OB34: Top 5 nhân vật tốt nhất để kết hợp với Hayato
- My Name (2021): Mọi điều về dàn diễn viên My Name (Netflix)

Vì vậy, để xử lý loại điều khiển này, đầu tiên chúng ta sẽ điền ngày tháng mà không phân tách bằng dấu phân cách, tức là nếu ngày là 25/09/2013, thì chúng ta sẽ chuyển 09252013 vào hộp nhập liệu. Sau khi hoàn tất, chúng tôi sẽ chuyển trọng tâm từ ngày này sang thời gian khác bằng cách nhấn ‘tab’ và thời gian điền.
Nếu chúng ta cần điền vào 02:45 PM, chúng ta sẽ chuyển nó là ‘0245PM’ vào cùng một hộp nhập liệu.
Mã cho người chọn ngày 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(“http://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ẽ như thế này

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

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

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 liên kết trước đó trên bộ chọn ngày.

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ừ menu 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.).

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ày
