Jak wybrać datę z DatePicker / Calendar w Selenium Webdriver

Anonim

W przypadku wyboru DateTime HTML5 ma nową kontrolkę pokazaną poniżej.

Dostęp do powyższej strony można uzyskać tutaj

Jeśli zobaczymy DOM kontrolki DateTime Picker, będzie tylko jedno pole wprowadzania zarówno dla daty, jak i godziny.

Aby więc obsłużyć ten rodzaj kontroli, najpierw wypełnimy datę bez oddzielania separatorem, tj. Jeśli data to 25.09.2013, to do pola wejściowego przekażemy 09252013. Po zakończeniu będziemy przenosić fokus z daty na czas, naciskając „tab” i czas wypełnienia.

Jeśli musimy wypełnić 14:45, przekażemy to „0245PM” do tego samego pola wprowadzania.

Kod dla Datepicker wygląda następująco -

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");Sterownik WebDriver = nowy ChromeDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get („http://demo.guru99.com/test/”);// Znajdź kontrolkę selektora daty i godzinyWebElement dateBox = driver.findElement (By.xpath ("// form // input [@ name = 'bdaytime']"));// Wypełnij datę jako mm / dd / rrrr jako 09/25/2013dateBox.sendKeys ("09252013");// Naciśnij klawisz Tab, aby przenieść fokus na pole czasudateBox.sendKeys (Keys.TAB);// Wypełnij czas jako 02:45 PMdateBox.sendKeys ("0245PM");}}

Wynik będzie taki jak-

Spójrzmy na inny przykład Kalendarza. Będziemy używać kontrolki Telerik DateTimePicker. Dostęp można uzyskać tutaj

Tutaj, jeśli musimy zmienić miesiąc, musimy kliknąć środek nagłówka kalendarza.

Podobnie, jeśli musimy zmienić rok, możemy to zrobić, klikając następny lub poprzedni link na pasku daty.

I na koniec, aby zmienić czas, możemy wybrać właściwy czas z listy rozwijanej (Uwaga: tutaj czas jest wybierany z przerwą 30 min. Tj. 12:00, 12:30, 1:00, 1:30 itd.).

Kompletny przykład wygląda następująco:

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 () zgłasza wyjątek {// DAte i Time do ustawienia w polu tekstowymString dateTime = "07.12.2014 14:00";Sterownik WebDriver = nowy FirefoxDriver ();driver.manage (). window (). maximize ();driver.get („https://demos.telerik.com/kendo-ui/datetimepicker/index”);driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);// przycisk do otwierania kalendarzaWebElement selectDate = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_dateview']"));selectDate.click ();// przycisk, aby przejść dalej w kalendarzuWebElement nextLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [zawiera (@ class, 'k-nav- Kolejny')]"));// przycisk do kliknięcia w środku nagłówka kalendarzaWebElement midLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [zawiera (@ class, 'k-nav- szybki')]"));// przycisk do przenoszenia poprzedniego miesiąca w kalendarzuWebElement previousLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [zawiera (@ class, 'k-nav- prev ')] "));// Podziel datę i godzinę, aby uzyskać tylko część datyString date_dd_MM_yyyy [] = (dateTime.split ("") [0]). Split ("/");// pobierz różnicę między rokiem bieżącym a rokiem do ustawienia w kalendarzuint yearDiff = Integer.parseInt (date_dd_MM_yyyy [2]) - Calendar.getInstance (). get (Calendar.YEAR);midLink.click ();if (yearDiff! = 0) {// jeśli będziesz musiał przeprowadzić się w przyszłym rokuif (yearDiff> 0) {for (int i = 0; i " + i);nextLink.click ();}}// jeśli musisz przenieść się w poprzednim rokuelse if (yearDiff <0) {for (int i = 0; i <(yearDiff * (- 1)); i ++) {System.out.println ("Różnica roku ->" + i);previousLink.click ();}}}Thread.sleep (1000);// Pobierz wszystkie miesiące z kalendarza, aby wybrać właściwyList  list_AllMonthToBook = driver.findElements (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // table // tbody // td [not (zawiera (@ klasa, 'k-inny-miesiąc') ))] "));list_AllMonthToBook.get (Integer.parseInt (date_dd_MM_yyyy [1]) - 1) .click ();Thread.sleep (1000);// pobierz wszystkie daty z kalendarza, aby wybrać poprawnąList  list_AllDateToBook = driver.findElements (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // table // tbody // td [not (zawiera (@ klasa, 'k-inny-miesiąc' ' ))] "));list_AllDateToBook.get (Integer.parseInt (date_dd_MM_yyyy [0]) - 1) .click ();///NA CZASWebElement selectTime = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_timeview']"));// kliknij przycisk wyboru czasuselectTime.click ();// pobierz listę czasówList  allTime = driver.findElements (By.xpath ("// div [@ data-role = 'popup'] [zawiera (@ style, 'display: block')] // ul // li [@role = 'opcja'] "));dateTime = dateTime.split ("") [1] + "" + dateTime.split ("") [2];// wybierz właściwy czasfor (WebElement webElement: allTime) {if (webElement.getText (). equalsIgnoreCase (dateTime)){webElement.click ();}}}}

Wynik będzie podobny