Selenium Webdriver'da DatePicker / Takvim'den Tarih Nasıl Seçilir

Anonim

DateTime seçimi için, HTML5 aşağıda gösterilen yeni bir kontrole sahiptir.

Yukarıdaki sayfaya buradan erişilebilir

DateTime Picker kontrolünün DOM'sunu görürsek, hem tarih hem de saat için yalnızca bir giriş kutusu olacaktır.

Dolayısıyla, bu tür bir kontrolü ele almak için önce tarihi sınırlayıcıyla ayırmadan dolduracağız, yani tarih 09/25/2013 ise, o zaman giriş kutusuna 09252013'ü geçeceğiz. Bittiğinde, 'sekme'ye basarak ve zamanı doldurarak odağı tarihten saate kaydıracağız.

02:45 PM doldurmamız gerekirse, aynı giriş kutusuna bir '0245PM' geçireceğiz.

Tarih seçici kodu şuna benzer -

import java.util.List;içe aktar java.util.concurrent.TimeUnit;import org.openqa.selenium.By;org.openqa.selenium.Keys'i içe aktar;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test;public class DateTimePicker {@Ölçekpublic void dateTimePicker () {System.setProperty ("webdriver.chrome.driver", "chromedriver.exe");WebDriver sürücüsü = yeni ChromeDriver ();driver.manage (). timeout (). örtük olarak Bekleme (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/");// Tarih saat seçici kontrolünü bulunWebElement dateBox = driver.findElement (By.xpath ("// form // input [@ name = 'bdaytime']"));// Tarihi aa / gg / yyyy olarak 09/25/2013 olarak doldurundateBox.sendKeys ("09252013");// Odağı zaman alanına kaydırmak için sekmeye basındateBox.sendKeys (Keys.TAB);// Saati 02:45 olarak doldurdateBox.sendKeys ("0245PM");}}

Çıktı şöyle olacak-

Başka bir Takvim örneğine bakalım. Telerik DateTimePicker kontrolünü kullanacağız. Buradan ulaşılabilir

Burada ayı değiştirmemiz gerekirse, takvim başlığının ortasına tıklamamız gerekir.

Benzer şekilde yılı değiştirmemiz gerekirse, bunu tarih seçici üzerindeki sonraki veya önceki bağlantılara tıklayarak yapabiliriz.

Ve son olarak saati değiştirmek için açılır menüden doğru zamanı seçebiliriz (Not: Burada saat 30 dakikalık bir aralıkta seçilir, yani 12:00, 12:30, 1:00, 1:30 vb.)

Tam bir örnek şöyle görünüyor:

java.util.Calendar'ı içe aktar;import java.util.List;içe aktar 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 {@Ölçekpublic void testDAtePicker () Exception {// Metin kutusunda ayarlanacak DAte ve ZamanDize dateTime = "12/07/2014 2:00 PM";WebDriver sürücüsü = yeni FirefoxDriver ();driver.manage (). window (). maximize ();driver.get ("https://demos.telerik.com/kendo-ui/datetimepicker/index");driver.manage (). timeout (). örtük olarak Bekleme (10, TimeUnit.SECONDS);// takvimi açma düğmesiWebElement selectDate = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_dateview']"));selectDate.click ();// takvimde bir sonrakine gitmek için düğmeWebElement nextLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [içerir (@ class, 'k-nav- Sonraki')]"));// takvim başlığının ortasındaki tıklama düğmesiWebElement midLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [içerir (@ class, 'k-nav- hızlı')]"));// takvimde önceki ayı taşımak için düğmeWebElement previousLink = driver.findElement (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // div [@ class = 'k-header'] // a [içerir (@ class, 'k-nav- önceki ')] "));// Yalnızca tarih bölümünü almak için tarih saatini bölünString date_dd_MM_yyyy [] = (dateTime.split ("") [0]). Split ("/");// takvimde ayarlamak için mevcut yıl ile yıl arasındaki yıl farkını alınint yearDiff = Integer.parseInt (date_dd_MM_yyyy [2]) - Calendar.getInstance (). get (Calendar.YEAR);midLink.click ();eğer (yearDiff! = 0) {// gelecek yıl taşınmanız gerekiyorsaeğer (yearDiff> 0) {for (int i = 0; i " + i);nextLink.click ();}}// bir önceki yıl taşınmanız gerekiyorsaelse if (yearDiff <0) {for (int i = 0; i <(yearDiff * (- 1)); i ++) {System.out.println ("Yıl Farkı ->" + i);previousLink.click ();}}}Thread.sleep (1000);// Doğru olanı seçmek için tüm ayları takvimden alın list_AllMonthToBook = driver.findElements (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // tablo // tbody // td [not (içerir (@ sınıfı, 'k-diğer-ay') ))] "));list_AllMonthToBook.get (Integer.parseInt (date_dd_MM_yyyy [1]) - 1) .click ();Thread.sleep (1000);// doğru olanı seçmek için tüm tarihleri ​​takvimden alListe  list_AllDateToBook = driver.findElements (By.xpath ("// div [@ id = 'datetimepicker_dateview'] // tablo // tbody // td [not (içerir (@ sınıfı, 'k-diğer-ay') ))] "));list_AllDateToBook.get (Integer.parseInt (date_dd_MM_yyyy [0]) - 1) .click ();///ZAMAN İÇİNWebElement selectTime = driver.findElement (By.xpath ("// span [@ aria-controls = 'datetimepicker_timeview']"));// tıklama zamanı seçici düğmesiselectTime.click ();// zamanların listesini alList  allTime = driver.findElements (By.xpath ("// div [@ data-role = 'popup'] [içerir (@ style, 'display: block')] // ul // li [@role = 'seçenek'] "));dateTime = dateTime.split ("") [1] + "" + dateTime.split ("") [2];// doğru zamanı seçiniçin (WebElement webElement: allTime) {eğer (webElement.getText (). equalsIgnoreCase (dateTime)){webElement.click ();}}}}

Çıktı şöyle olacak