2016-07-14 4 views
-1

Я пытаюсь выбрать будущую дату из даты, но не могу понять, как это сделать.Selenium -Выберите дату в будущем с даты выбора

Мне нужно выбрать дату за 14 дней, но выбор даты покажет только один календарный месяц. Картинка была загружена по следующей ссылке.

enter image description here

Что будет логика выбора будущей даты 14 дней вперед?

==================================================================================================================================== ===================

Новой информация

я более глубоко посмотрела в элементе с помощью поджигателя, тем DatePicker делятся на классы строк. Ниже экспорт выход DatePicker XML:

<tr class="w27"> <tr class="w28"> <td id="startCalendarDiv_t_cell14" class="calcell wd0 d10 previous calcellleft">10</td> <td id="startCalendarDiv_t_cell15" class="calcell wd1 d11 previous">11</td> <td id="startCalendarDiv_t_cell16" class="calcell wd2 d12 previous">12</td> <td id="startCalendarDiv_t_cell17" class="calcell wd3 d13 previous">13</td> <td id="startCalendarDiv_t_cell18" class="calcell wd4 d14 previous">14</td> <td id="startCalendarDiv_t_cell19" class="calcell wd5 d15 today selected selectable"> <a class="selector" href="#">15</a> </td> <td id="startCalendarDiv_t_cell20" class="calcell wd6 d16 selectable calcellright"> </tr> <tr class="w29"> 

<td id="startCalendarDiv_t_cell21" class="calcell wd0 d17 selectable calcellleft"> 
<td id="startCalendarDiv_t_cell22" class="calcell wd1 d18 selectable"> 
<td id="startCalendarDiv_t_cell23" class="calcell wd2 d19 selectable"> 
<td id="startCalendarDiv_t_cell24" class="calcell wd3 d20 selectable"> 
<td id="startCalendarDiv_t_cell25" class="calcell wd4 d21 selectable"> 
<td id="startCalendarDiv_t_cell26" class="calcell wd5 d22 selectable"> 
<td id="startCalendarDiv_t_cell27" class="calcell wd6 d23 selectable calcellright"> 
</tr> 
<tr class="w30"> 

Если посмотреть на сегодняшний день она имеет следующее свойство:

<td id="startCalendarDiv_t_cell19" class="calcell wd5 d15 today selected selectable"> 

Мои мысли были найти элемент по классу, который имеет «сегодня », а затем определите идентификатор, добавьте к нему 14 дней и выберите его. Не уверен, как это сделать.

Кроме того, «findElement» не работает. Код «findElement», который я написал:

//looking for the class 
driver.FindElement(By.ClassName("calcell wd5 d15 today selected selectable")); 

Любой ключ, что делать?

+3

1: Вы пробовали что-нибудь? 2: Каков ваш исход? 3: Покажите нам свой код. 4: Покажите нам HTML-код за этим календарем. –

+0

На каком языке вы можете указать ссылку на веб-страницу или опубликовать код html – Madhan

ответ

0

Логик будет:

  1. ищет выделенный элемент даты
  2. получить текстовое значение (в данном случае 13)
  3. добавить 14 к этому 13 = 27
  4. Посмотрите на месяц и год (в данном случае - июль 2016 года)
  5. получить последнюю дату июля 2016 года (в этом случае 31)
  6. если нет 3, выше последней даты июля 2016 года, уменьшите на что последняя дата и добавить месяц на 1.
  7. ищет элемент с текстом из No.6 и убедитесь, что вы находитесь в том же месяце, как определено в No.6

------- ------------ Обновление после новой информации ---------------------------

Вы не можете использовать By.ClassName, если класс содержит пробел. Вместо этого, чтобы найти «сегодня» в классе, используйте Xpath:

driver.FindElement(By.XPath("//td[contains(@class,'today')]")); 
+0

Вопрос в том, как искать выделенный элемент. Есть ли опция поиска выделенной даты с использованием C# или селена? – user2434600

0

Это только код Java и не имеет никакого отношения к календарю Picker.

Просто используйте этот скрипт в своем коде и используйте строку 'newDay' для ввода в поле даты с помощью SendKeys().

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); 
    Date date = new Date(); 
    String todaysDate = dateFormat.format(date); 
    System.out.println(todaysDate); 


    String month=todaysDate.substring(0,2); 
    String day=todaysDate.substring(3,5); 

    int monthValue=Integer.parseInt(month); 
    int dayValue=Integer.parseInt(day); 

    if(dayValue+14>31) 
    { 
     int temp= 31-dayValue; 
     dayValue=14-temp; 
     monthValue=monthValue+1; 
    } 
    else 
    { 
     dayValue=dayValue+14; 
    } 
    String newDay = monthValue+"/"+dayValue+"/"+"2016"; 
    System.out.println(newDay); 

водитель.findElement (by.xpath (DateBox)) SendKeys (NewDay).

+0

sendkeys не будет работать, поскольку текстовое поле, в котором проходит дата, является readonly – user2434600

1

Answer by Shekhar правильный, но использует старые классы и работает слишком сложно.

java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют старые неприятные классы времени, такие как java.util.Date, .Calendar, & java.text.SimpleDateFormat.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений.

Большая часть функциональности java.time портирована на Java 6 & 7 в ThreeTen-Backport и далее адаптирована для Android в ThreeTenABP.

LocalDate

LocalDate класс представляет собой дату только значение без времени суток и без временной зоны.

LocalDate localDate = LocalDate.of(2016 , 7 , 13); 
LocalDate twoWeeksLater = localDate.plusWeeks(2); 

Если дата выбора виджета еще не был обновлен для работы с java.time типов, вы можете опрашивать LocalDate объект для его частей.

int year = localDate.getYear(); 
int month = localDate.getMonthValue(); // The method `getMonth` returns an object from the `Month` enum rather than an integer. 
int dayOfMonth = localDate.getDayOfMonth(); 
Смежные вопросы