Per la selezione di DateTime, HTML5 ha un nuovo controllo mostrato di seguito.
La pagina sopra è accessibile qui
Se vediamo il DOM del controllo DateTime Picker, ci sarà solo una casella di input sia per la data che per l'ora.
Quindi per gestire questo tipo di controllo prima riempiremo la data senza separarla con delimitatore, cioè se la data è 25/09/2013, allora passeremo 09252013 alla casella di input. Una volta fatto, sposteremo il focus da una data all'altra premendo "tab" e riempi il tempo.
Se dobbiamo riempire le 14:45, passeremo un "0245 PM" alla stessa casella di input.
Il codice per datepicker ha questo aspetto:
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 {@Testpublic void dateTimePicker () {System.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Driver WebDriver = nuovo ChromeDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/");// Trova il controllo selezione data e oraWebElement dateBox = driver.findElement (By.xpath ("// form // input [@ name = 'bdaytime']"));// Compilare la data come mm / gg / aaaa come 25/09/2013dateBox.sendKeys ("09252013");// Premere tab per spostare il focus sul campo del tempodateBox.sendKeys (Keys.TAB);// Riempi il tempo come 02:45 PMdateBox.sendKeys ("0245PM");}}
L'output sarà come-
Vediamo un altro esempio di Calendar. Useremo il controllo di Telerik DateTimePicker. È possibile accedervi qui
Qui se dobbiamo cambiare il mese, dobbiamo fare clic al centro dell'intestazione del calendario.
Allo stesso modo, se abbiamo bisogno di cambiare l'anno, possiamo farlo facendo clic sui link successivo o precedente sul datepicker.
Infine, per modificare l'ora, possiamo selezionare l'ora corretta dal menu a discesa (Nota: qui l'ora è selezionata in un intervallo di 30 minuti, ovvero 12:00, 12:30, 1:00, 1:30 ecc.).
Un esempio completo sembra:
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 {@Testpublic void testDAtePicker () genera un'eccezione {// DAte e Time da impostare nella casella di testoString dateTime = "12/07/2014 2:00 PM";Driver WebDriver = nuovo FirefoxDriver ();driver.manage (). window (). maxim ();driver.get ("https://demos.telerik.com/kendo-ui/datetimepicker/index");driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);// pulsante per aprire il calendarioWebElement selectDate = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_dateview']"));selectDate.click ();// pulsante per spostarsi successivamente nel calendarioWebElement nextLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contiene (@ class, 'k-nav- Il prossimo')]"));// pulsante per fare clic al centro dell'intestazione del calendarioWebElement midLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contiene (@ class, 'k-nav- veloce')]"));// pulsante per spostare il mese precedente nel calendarioWebElement previousLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contiene (@ class, 'k-nav- prev ')] "));// Suddividi la data e l'ora per ottenere solo la parte relativa alla dataStringa date_dd_MM_yyyy [] = (dateTime.split ("") [0]). Split ("/");// ottiene la differenza di anno tra l'anno corrente e l'anno da impostare nel calendarioint yearDiff = Integer.parseInt (date_dd_MM_yyyy [2]) - Calendar.getInstance (). get (Calendar.YEAR);midLink.click ();if (yearDiff! = 0) {// se devi trasferirti l'anno prossimoif (yearDiff> 0) {for (int i = 0; i" + i);nextLink.click ();}}// se devi trasferirti l'anno precedentealtrimenti if (yearDiff <0) {for (int i = 0; i <(yearDiff * (- 1)); i ++) {System.out.println ("Year Diff ->" + i);previousLink.click ();}}}Thread.sleep (1000);// Ottieni tutti i mesi dal calendario per selezionare quello correttoList 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);// recupera tutte le date dal calendario per selezionarne una correttaList 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 ();///PER TEMPOWebElement selectTime = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_timeview']"));// fare clic sul pulsante di selezione dell'oraselectTime.click ();// ottiene l'elenco delle volteElenco allTime = driver.findElements (By.xpath ("// div [@ data-role = 'popup'] [contiene (@ style, 'display: block')] // ul // li [@role = 'opzione'] "));dateTime = dateTime.split ("") [1] + "" + dateTime.split ("") [2];// seleziona l'ora correttaper (WebElement webElement: allTime) {if (webElement.getText (). equalsIgnoreCase (dateTime)){webElement.click ();}}}}
L'output sarà come