无法使用Selenium选择jquery日期选择器的月份

时间:2016-12-21 17:29:58

标签: jquery-ui selenium datepicker

我正在尝试在jqueryui.com网站上的日期选择器中选择一个自定义日期,它能够处理年份,但我为该月编写的代码无效。请找到我的代码使用: -

private static void PickDate(WebDriver driver, String day, String mon, String year) throws Exception {
     while (year != driver.findElement(By.cssSelector("span.ui-datepicker-year")).getText())
     {
         if (Integer.parseInt(year) < Integer.parseInt(driver.findElement(By.cssSelector("span.ui-datepicker-year")).getText()))
         {
             driver.findElement(By.cssSelector("a.ui-datepicker-prev")).click();
             System.out.println(driver.findElement(By.cssSelector("span.ui-datepicker-month")).getText());
         }
         else if (Integer.parseInt(year) > Integer.parseInt(driver.findElement(By.cssSelector("span.ui-datepicker-year")).getText()))
         {
             driver.findElement(By.cssSelector("a.ui-datepicker-next")).click();
         }
     }  
     while (mon != (driver.findElement(By.cssSelector("span.ui-datepicker-month")).getText()))
     {
         if (driver.findElement(By.cssSelector("span.ui-datepicker-month")).getText() != "January")
         {
             driver.findElement(By.cssSelector("a.ui-datepicker-prev")).click();
         }
         if (mon != driver.findElement(By.cssSelector("span.ui-datepicker-month")).getText())
         {
             driver.findElement(By.cssSelector("a.ui-datepicker-next")).click();
         }
     }

1 个答案:

答案 0 :(得分:0)

如果目的是在datepicker中选择一个日期,我宁愿使用执行脚本而不是来回点击。 :) 类似的东西:

((JavascriptExecutor) driver).ExecuteScript("$('#datepicker').datepicker('setDate', new Date(year, month, day))")

如果您想点击上一个/下一个按钮,那么:

因为你的代码看起来很复杂,所以我想提供另一种方法,我相信这会更简单。

请注意,当您单击上一个/下一个按钮时,它将向前/向后移动1个月。因此,如果您首先计算要选择的日期(月份和年份)与DatePicker上当前显示日期之间的差异,则会更好。

如果你用java编写,你可以使用类似的东西:

YearMonth selectDate = YearMonth.of(year, month); // year, month are integer
int dp_Year = Integer.parseInt(driver.findElement(By.cssSelector("span.ui-datepicker-year")).getText()); 
int dp_Month = // convert it yourself
YearMonth dp_Date = YearMonth.of(dp_Year, dp_Month);
int month_diff = dp_Date.until(selectDate, ChronoUnit.MONTHS);

根据month_diff及其符号(+或 - ),您将知道需要点击哪个按钮以及多少次。 我没有java试用,但我希望上面的代码能够运行。