Cómo seleccionar la fecha de DatePicker / Calendar en Selenium Webdriver

Anonim

Para la selección de fecha y hora, HTML5 tiene un nuevo control que se muestra a continuación.

Se puede acceder a la página anterior aquí

Si vemos el DOM del control Selector de fecha y hora, solo habrá un cuadro de entrada para la fecha y la hora.

Entonces, para manejar este tipo de control primero llenaremos la fecha sin separar con delimitador, es decir, si la fecha es el 25/09/2013, entonces pasaremos 09252013 al cuadro de entrada. Una vez hecho esto, cambiaremos el enfoque de la fecha a la hora presionando 'tabulador' y llenar el tiempo.

Si necesitamos llenar las 02:45 PM, le pasaremos un '0245PM' al mismo cuadro de entrada.

El código para el selector de fechas se ve así:

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;importar org.openqa.selenium.Keys;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test;public class DateTimePicker {@Pruebapublic void dateTimePicker () {System.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/");// Encuentra el control del selector de fecha y horaWebElement dateBox = driver.findElement (By.xpath ("// formulario // input [@ name = 'bdaytime']"));// Llene la fecha como mm / dd / aaaa como 25/09/2013dateBox.sendKeys ("09252013");// Presione la pestaña para cambiar el enfoque al campo de tiempodateBox.sendKeys (Keys.TAB);// Llene el tiempo como 02:45 PMdateBox.sendKeys ("0245PM");}}

La salida será como-

Veamos otro ejemplo de Calendario. Usaremos el control Telerik DateTimePicker. Se puede acceder aquí

Aquí si necesitamos cambiar el mes, tenemos que hacer clic en el medio del encabezado del calendario.

De manera similar, si necesitamos cambiar el año, podemos hacerlo haciendo clic en los enlaces siguientes o anteriores en el selector de fechas.

Y finalmente, para cambiar la hora, podemos seleccionar la hora correcta en el menú desplegable (Nota: aquí la hora se selecciona en un intervalo de 30 minutos, es decir, 12:00, 12:30, 1:00, 1:30, etc.).

Un ejemplo completo parece-

import java.util.Calendar;import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class DatePicker {@Pruebapublic void testDAtePicker () lanza Exception {// Fecha y hora a establecer en el cuadro de textoString dateTime = "12/07/2014 2:00 PM";Controlador WebDriver = nuevo FirefoxDriver ();driver.manage (). window (). maximizar ();driver.get ("https://demos.telerik.com/kendo-ui/datetimepicker/index");driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);// botón para abrir el calendarioWebElement selectDate = driver.findElement (By.xpath ("// intervalo [@ aria-controls = 'datetimepicker_dateview']"));selectDate.click ();// botón para moverse a continuación en el calendarioWebElement nextLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contiene (@ class, 'k-nav- próximo')]"));// botón para hacer clic en el centro del encabezado del calendarioWebElement midLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contiene (@ class, 'k-nav- rápido')]"));// botón para mover el mes anterior en el calendarioWebElement previousLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contiene (@ class, 'k-nav- prev ')] "));// Divide la fecha y hora para obtener solo la parte de la fechaCadena date_dd_MM_yyyy [] = (dateTime.split ("") [0]). Split ("/");// obtener la diferencia de año entre el año actual y el año para establecer en calendarioint yearDiff = Integer.parseInt (date_dd_MM_yyyy [2]) - Calendar.getInstance (). get (Calendar.YEAR);midLink.click ();if (yearDiff! = 0) {// si tienes que mudarte el año que vieneif (yearDiff> 0) {para (int i = 0; i " + i);nextLink.click ();}}// si tienes que mudarte el año anteriorelse if (yearDiff <0) {para (int i = 0; i <(yearDiff * (- 1)); i ++) {System.out.println ("Diferencia de año ->" + i);previousLink.click ();}}}Thread.sleep (1000);// Obtener todos los meses del calendario para seleccionar el correctoList  list_AllMonthToBook = driver.findElements (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // tabla // tbody // td [not (contains (@ class, 'k-other-month' ))] "));list_AllMonthToBook.get (Integer.parseInt (date_dd_MM_yyyy [1]) - 1) .click ();Thread.sleep (1000);// obtener todas las fechas del calendario para seleccionar la correctaList  list_AllDateToBook = driver.findElements (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // tabla // tbody // td [not (contains (@ class, 'k-other-month') ))] "));list_AllDateToBook.get (Integer.parseInt (date_dd_MM_yyyy [0]) - 1) .click ();///PARA EL TIEMPOWebElement selectTime = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_timeview']"));// haga clic en el botón selector de tiemposelectTime.click ();// obtener lista de tiemposList  allTime = driver.findElements (By.xpath ("// div [@ data-role = 'popup'] [contains (@ style, 'display: block')] // ul // li [@role = 'opción'] "));dateTime = dateTime.split ("") [1] + "" + dateTime.split ("") [2];// seleccione la hora correctapara (WebElement webElement: allTime) {if (webElement.getText (). equalsIgnoreCase (fecha y hora)){webElement.click ();}}}}

La salida será como