Для выбора DateTime в HTML5 есть новый элемент управления, показанный ниже.
Выше страницу можно получить здесь
Если мы увидим DOM элемента управления DateTime Picker, будет только одно поле ввода для даты и времени.
Итак, чтобы обработать этот тип управления, сначала мы заполним дату без разделения разделителем, т.е. если дата 25.09.2013, тогда мы передадим 09252013 в поле ввода. После этого мы сместим фокус с даты на время, нажав вкладку и время заполнения.
Если нам нужно заполнить 14:45, мы передадим ему «0245PM» в то же поле ввода.
Код для datepicker выглядит так -
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 {@Тестpublic void dateTimePicker () {System.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/");// Находим элемент управления выбора даты и времениWebElement dateBox = driver.findElement (By.xpath ("// форма // input [@ name = 'bdaytime']"));// Дата заполнения в формате мм / дд / гггг 25.09.2013dateBox.sendKeys ("09252013");// Нажимаем вкладку, чтобы сместить фокус на поле времениdateBox.sendKeys (Keys.TAB);// Заполняем время как 14:45dateBox.sendKeys ("0245PM");}}
Результат будет примерно таким:
Давайте посмотрим на другой пример Календаря. Мы будем использовать элемент управления Telerik DateTimePicker. Доступно здесь
Здесь, если нам нужно изменить месяц, мы должны нажать на середину заголовка календаря.
Точно так же, если нам нужно изменить год, мы можем сделать это, щелкнув следующую или предыдущую ссылку на панели даты.
И, наконец, для изменения времени мы можем выбрать правильное время из раскрывающегося списка (Примечание: здесь время выбирается с интервалом в 30 минут, т.е. 12:00, 12:30, 1:00, 1:30 и т. Д.).
Полный пример выглядит так:
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 {@Тестpublic void testDAtePicker () выдает исключение {// DAte и время должны быть установлены в текстовом полеСтрока dateTime = "07.12.2014 14:00";Драйвер WebDriver = новый FirefoxDriver ();driver.manage (). window (). maximize ();driver.get ("https://demos.telerik.com/kendo-ui/datetimepicker/index");driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);// кнопка для открытия календаряWebElement selectDate = driver.findElement (By.xpath ("// диапазон [@ aria-controls = 'datetimepicker_dateview']"));selectDate.click ();// кнопка для перехода к следующему в календареWebElement nextLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contains (@ class, 'k-nav- следующий')]"));// кнопка для нажатия в центре заголовка календаряWebElement midLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contains (@ class, 'k-nav- быстрый')]"));// кнопка для перехода к предыдущему месяцу в календареWebElement previousLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contains (@ class, 'k-nav- пред ')] "));// Разделить дату и время, чтобы получить только часть датыСтрока date_dd_MM_yyyy [] = (dateTime.split ("") [0]). Split ("/");// получаем разницу в году между текущим годом и годом для установки в каландереint yearDiff = Integer.parseInt (date_dd_MM_yyyy [2]) - Calendar.getInstance (). get (Calendar.YEAR);midLink.click ();if (yearDiff! = 0) {// если вам нужно переехать в следующем годуif (yearDiff> 0) {for (int i = 0; i" + i);nextLink.click ();}}// если вам нужно переехать в прошлом годуelse if (yearDiff <0) {for (int i = 0; i <(yearDiff * (- 1)); i ++) {System.out.println ("Разница по годам ->" + i);previousLink.click ();}}}Thread.sleep (1000);// Получить все месяцы из календаря, чтобы выбрать правильныйList 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);// получаем все даты из календаря, чтобы выбрать правильнуюСписок 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 ();///НА ВРЕМЯWebElement selectTime = driver.findElement (By.xpath ("// диапазон [@ aria-controls = 'datetimepicker_timeview']"));// нажмите кнопку выбора времениselectTime.click ();// получаем список разСписок allTime = driver.findElements (By.xpath ("// div [@ data-role = 'popup'] [contains (@ style, 'display: block')] // ul // li [@role = 'option'] "));dateTime = dateTime.split ("") [1] + "" + dateTime.split ("") [2];// выбираем правильное времядля (WebElement webElement: allTime) {если (webElement.getText (). equalsIgnoreCase (dateTime)){webElement.click ();}}}}
Выход будет как