Selenium - 从日期选择器中选择未来日期

时间:2016-07-14 03:20:16

标签: c# selenium selenium-webdriver datepicker logic

我正在尝试从日期选择器中选择未来日期,但无法理解如何执行此操作。

我需要提前14天选择日期,但日期选择器一次只能显示一个日历月。图片已上传至以下链接。

enter image description here

提前14天选择未来日期的逻辑是什么?

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

新信息

我使用firebug更深入地查看了元素,将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">

我的想法是按类查找元素,其中包含“今天”,然后识别ID,添加14天并选择它。不知道如何完成它。

此外,'findElement'无效。我写的'findElement'代码是:

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

有任何线索该做什么?

3 个答案:

答案 0 :(得分:1)

Answer by Shekhar是正确的,但是使用旧类并且工作太难。

java.time

java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date.Calendar和&amp; java.text.SimpleDateFormat

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6&amp; ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。

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();

答案 1 :(得分:0)

逻辑是:

  1. 查找突出显示的日期元素
  2. 获取文本值(在本例中为13)
  3. 将13添加到13 = 27
  4. 查找月份和年份(在本例中为2016年7月)
  5. 获取2016年7月的最后日期(在本案例中为31)
  6. 如果上述第3项超出2016年7月的最后日期,请按最后日期减少,并将月份加1。
  7. 查找带有6号文字的元素,并确保你在第6号确定的同一个月。
  8. -------------------新信息后更新------------------------ ---

    如果类包含空格char,则不能使用By.ClassName。相反,要在类中找到“今天”,请使用Xpath:

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

答案 2 :(得分:0)

这只是Java代码,与Calendar Picker无关。

只需在代码中使用此脚本,然后使用“新日期”即可。使用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);

driver.findElement(by.xpath(DateBox))的SendKeys(newDay);