Como selecionar a data do DatePicker / Calendar no Selenium Webdriver

Anonim

Para seleção de DateTime, HTML5 tem um novo controle mostrado abaixo.

A página acima pode ser acessada aqui

Se virmos o DOM do controle DateTime Picker, haverá apenas uma caixa de entrada para data e hora.

Portanto, para lidar com este tipo de controle primeiro preencheremos a data sem separar com delimitador, ou seja, se a data for 25/09/2013, então passaremos 09252013 para a caixa de entrada. Uma vez feito isso, vamos mudar o foco de data para hora pressionando 'tab' e preencher o tempo.

Se precisarmos preencher 14h45, passaremos '14h45' para a mesma caixa de entrada.

O código para selecionador de data se parece com este -

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 {@Testepublic void dateTimePicker () {System.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Driver WebDriver = novo ChromeDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/");// Encontre o controle do selecionador de data e horaWebElement dateBox = driver.findElement (By.xpath ("// formulário // input [@ name = 'bdaytime']"));// Preencha a data como mm / dd / aaaa como 25/09/2013dateBox.sendKeys ("09252013");// Pressione tab para mudar o foco para o campo de tempodateBox.sendKeys (Keys.TAB);// Preencha o tempo como 14h45dateBox.sendKeys ("0245PM");}}

A saída será como-

Vejamos outro exemplo de calendário. Usaremos o controle Telerik DateTimePicker. Pode ser acessado aqui

Aqui, se precisarmos alterar o mês, temos que clicar no meio do cabeçalho do calendário.

Da mesma forma, se precisarmos alterar o ano, podemos fazê-lo clicando nos links próximo ou anterior no selecionador de data.

E, finalmente, para alterar a hora, podemos selecionar a hora correta na lista suspensa (Observação: aqui, a hora é selecionada em um intervalo de 30 minutos, ou seja, 12:00, 12:30, 1:00, 1:30 etc.).

Um exemplo completo se parece com-

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 {@Testepublic void testDAtePicker () throws Exception {// DAte e hora a serem definidos na caixa de textoString dateTime = "12/07/2014 14:00";Driver WebDriver = novo FirefoxDriver ();driver.manage (). window (). maximize ();driver.get ("https://demos.telerik.com/kendo-ui/datetimepicker/index");driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);// botão para abrir o calendárioWebElement selectDate = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_dateview']"));selectDate.click ();// botão para mover a seguir no calendárioWebElement nextLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contains (@ class, 'k-nav- Próximo')]"));// botão para clicar no centro do cabeçalho do calendárioWebElement midLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contains (@ class, 'k-nav- velozes')]"));// botão para mover o mês anterior no calendárioWebElement previousLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [contains (@ class, 'k-nav- prev ')] "));// Divida a data e hora para obter apenas a parte da dataString date_dd_MM_yyyy [] = (dateTime.split ("") [0]). Split ("/");// obtém a diferença do ano entre o ano atual e o ano para definir no calendárioint yearDiff = Integer.parseInt (date_dd_MM_yyyy [2]) - Calendar.getInstance (). get (Calendar.YEAR);midLink.click ();if (Dif. ano! = 0) {// se você tiver que se mudar no próximo anoif (yearDiff> 0) {for (int i = 0; i " + i);nextLink.click ();}}// se você tiver que mudar no ano anteriorelse if (yearDiff <0) {para (int i = 0; i <(dif. ano * (- 1)); i ++) {System.out.println ("Year Diff ->" + i);previousLink.click ();}}}Thread.sleep (1000);// Obtenha todos os meses do calendário para selecionar o corretoList  list_AllMonthToBook = driver.findElements (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // tabela // tbody // td [not (contains (@ class, 'k-other-month' ))] "));list_AllMonthToBook.get (Integer.parseInt (date_dd_MM_yyyy [1]) - 1) .click ();Thread.sleep (1000);// obtenha todas as datas do calendário para selecionar a corretaList  list_AllDateToBook = driver.findElements (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // tabela // tbody // td [not (contains (@ class, 'k-other-month' ))] "));list_AllDateToBook.get (Integer.parseInt (date_dd_MM_yyyy [0]) - 1) .click ();/// POR TEMPOWebElement selectTime = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_timeview']"));// clique no botão seletor de temposelectTime.click ();// obter lista de temposList  allTime = driver.findElements (By.xpath ("// div [@ data-role = 'popup'] [contains (@ style, 'display: block')] // ul // li [@role = 'opção'] "));dateTime = dateTime.split ("") [1] + "" + dateTime.split ("") [2];// selecione a hora corretapara (WebElement webElement: allTime) {if (webElement.getText (). equalsIgnoreCase (dateTime)){webElement.click ();}}}}

A saída será como