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.
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ờ.
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ư-
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
Ở đâ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.
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.
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.).
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