在不使用日期选择器的情况下从网页中选择日期

时间:2016-01-10 00:32:48

标签: date selenium select

我正在尝试从网页中选择一个日期,即生日。当我点击日历图标时,会打开一个带有日历的新浏览器窗口,它默认显示当前日期。选择月份和年份没有下拉菜单。月份和年份显示为标签。 (例如,2016年1月)。页面中有4个链接<<,<导航回来,然后>,>>向前导航。

这就是问题所在。 (对于其他人来说,这可能很简单)。我想选择1983年6月11日的日期。我能够回到1983年1月。但是现在,我想要去1983年6月并选择日期11,这是没有发生的。下面是代码。请注意,我没有使用日期选择器选项。

    boolean t2=false;
    for(int i=0;i<50;i++)
    {
        //To check if the year is 1983
        try {
                driver.findElement(By.xpath("//*[contains(text(),'1983')]"));
                try{
                    driver.findElement(By.xpath("//*[contains(text(),'June')]"));
                    t2=true;
                    break;                      
                }
                catch (Exception e)
                {
                    WebElement temp3 = driver.findElement(By.xpath("//img[@src='images/next.gif']"));
                    temp3.click();
                }
            } 
        catch (Exception e) {
            WebElement temp2 = driver.findElement(By.xpath("//img[@src='images/prev_year.gif']"));
            temp2.click();
            }
    }

1 个答案:

答案 0 :(得分:1)

我讨价还价,你的异常处理掩盖了一个微妙的问题,因此你无法确定根本原因。原因是因为您正在捕获发生的任何异常(根据您的catch(Exception e)语句)。如果发生异常是因为您认为正确发生了xpath无法找到下一个按钮怎么办?你永远都不会知道你何时捕获异常。您声明点击没有发生,但是什么/不会发生?有什么错误吗?

我建议重新处理如下所示的处理(自由格式伪代码),如果问题仍然存在,您会下注,然后您的堆栈跟踪将指向正确的方向。

boolean t2=false;
boolean correctYearIsPresent = false;
boolean correctMonthIsPresent = false;
do {

     //Using the plural findElements here because a "no elements" condition
     //will not yield an Exception like the singular method will. The
     //list size will simply be 0 instead. If list is >0, element(s) was located.

     if (driver.findElements(By.xpath("//*[contains(text(),'1983')]")).size > 0)
     {
          correctYearIsPresent = true;
     }
     else 
     {
          driver.findElement(By.xpath("//img[@src='images/prev_year.gif']")).click();
     }
while(false == correctYearIsPresent);

do {
     if (driver.findElements(By.xpath("//*[contains(text(),'June')]")).size > 0)
     {
          correctMonthIsPresent = true;
     }
     else 
     {
          driver.findElement(By.xpath("//img[@src='images/next.gif']")).click();
     }
while(false == correctMonthIsPresent);