Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Selenium Webriver处理一个月和一年都保存在同一html标记中的日期选择器?_Java_Selenium_Selenium Webdriver_Datepicker_Logic - Fatal编程技术网

Java 如何使用Selenium Webriver处理一个月和一年都保存在同一html标记中的日期选择器?

Java 如何使用Selenium Webriver处理一个月和一年都保存在同一html标记中的日期选择器?,java,selenium,selenium-webdriver,datepicker,logic,Java,Selenium,Selenium Webdriver,Datepicker,Logic,我想创建一个方法,该方法接受以下格式的字符串变量“2018年4月1日”。然后拆分该字符串,并使用日期“配料”在选择器中选择日期。我已经介绍了选择日期和单击箭头更改“月-年”对。我也知道如何到达用户插入的年份,但我不确定如何在到达年份时选择正确的月份。下面是我到目前为止想出的代码 public void pickTheDate() { String date = "10 April 2018"; String[] dateElements = date.split(" ");

我想创建一个方法,该方法接受以下格式的字符串变量“2018年4月1日”。然后拆分该字符串,并使用日期“配料”在选择器中选择日期。我已经介绍了选择日期和单击箭头更改“月-年”对。我也知道如何到达用户插入的年份,但我不确定如何在到达年份时选择正确的月份。下面是我到目前为止想出的代码

public void pickTheDate() {

    String date = "10 April 2018";
    String[] dateElements = date.split(" ");
    WebElement nextMonth = driver.findElement(By.xpath("somexpath"));
    WebElement previousMonth = driver.findElement(By.xpath("somexpath1"));

    String dayFromUserInput = dateElements[0];
    String monthFromUserInput = dateElements[1];
    String yearFromUserInput = dateElements[2];

    WebDriverWait wait = new WebDriverWait(driver, 10);

    WebElement datePickerHeader= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("somexpath")));
    String textFromDatePickerHeader = datePickerHeader.getText();
让我们假设日期选择器标题中的日期为“2017年10月”

    String[] dateElementsFromDatePickerHeader = textFromDatePickerHeader.split(" ");
    int yearDiff = Integer.parseInt(yearFromUserInput) - Integer.parseInt(dateElementsFromDatePickerHeader[1]);

    if (yearDiff != 0) {
        //moving to next year
        if (yearDiff > 0) {
            for (int i = 0; i < yearDiff; i++) {
                nextMonth.click();
            }
String[]dateElementsFromDatePickerHeader=textFromDatePickerHeader.split(“”);
int yearDiff=Integer.parseInt(yearFromUserInput)-Integer.parseInt(dateElementsFromDatePickerHeader[1]);
如果(年差!=0){
//移到明年
如果(年差>0){
对于(int i=0;i
此时,我知道我到达的月份是“2018年1月”

        }
        //moving to previous year
        else if (yearDiff < 0) {
            for (int i = 0; i < (yearDiff * (-1)); i++) {
                previousMonth.click();
            }
        }
    }
}
}
//移到上一年
否则如果(年差<0){
对于(int i=0;i<(yearDiff*(-1));i++){
上个月。单击();
}
}
}
}
如果我要在2016年内搜索日期,我知道遇到的第一个月是“2016年12月”。
请告知我如何将导航的正确逻辑合并到用户插入的月份。提前感谢。

这取决于你选择约会对象的行为。以下日期选择器的结构仅供参考:

如果单击“2017年10月”标题,则会打开月份供选择,如下图所示:

再次点击“2017”标题,然后打开年份供选择

因此,这里将介绍自动化测试用例

  • 日期为2017年10月25日
  • 将日期分成3块
  • 单击标题并导航,直到它显示要选择的年份列表
  • 将日历导航到接收年份,即2017年
  • 然后导航并选择收到的月份,即10月
  • 最后选择日期,即25
  • 在此处找到示例代码:

    public void enterFromDate(String fromDate) throws InterruptedException
    {
         // Split the data and store it in string array
         String[]  data = fromDate.split(" ");
    
         // click datepicker icon
         fromDateCalenderIcon.click();
         // Click date picker header, It moves to month list
         calenderHeader.click();
         // Again click date picker header, It now moves to Year listing
         calenderHeader.click();
    
    
         mainloop: while(true)
         {
             //Iterate all year
             for(int i=0;i<datePickerData.size();i++)
             {
                 // check weather year available in list if yes then select it 
                 if(datePickerData.get(i).getText().trim().contains(data[2]))
                 {
    
                     datePickerData.get(i).click();     
                     break mainloop;                     
                 }
             }
              // else click back arrow 
             datePickerLeftArrow.click();
         }
    
         // Iterate month list
         for(WebElement e: datePickerData)
         {
             // If months available then click on it 
             if(e.getText().equals(data[1]))
             {
                 e.click();
                 break;
             }
         }
    
         // Iterate Date and select as required 
         for(WebElement e: datePickerData)
         {
             if((e.getText().equals(data[0]) && (e.findElement(By.tagName("span"))).getAttribute("class").equals("ng-binding")))
             {
                 e.click();
                 break;
             }
         }
    }
    
    public void enterFromDate(String fromDate)引发中断异常
    {
    //拆分数据并将其存储在字符串数组中
    字符串[]数据=fromDate.split(“”);
    //单击日期选择器图标
    FromDateCalender图标。单击();
    //单击日期选择器标题,它将移动到月份列表
    压延头。单击();
    //再次单击日期选择器标题,它现在移动到年份列表
    压延头。单击();
    主循环:while(true)
    {
    //全年迭代
    对于(int i=0;i