2017-10-13 21 views
0

我想創建一個接受字符串變量的方法'2018年4月1日'。該字符串將被拆分,並且日期'成分'將用於在選取器See the picker image中選擇日期。我已經涵蓋了選擇日期和點擊箭頭來改變'月份 - 年份'對。我也知道如何達到用戶插入的年份,但我不確定如何選擇當年達到的正確月份。下面是我到目前爲止的代碼。如何使用Selenium Webriver處理保存在同一個html標記中的月份和年份的日期選擇器?

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年十月」

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

在這一點上,我知道我到達月份是「2018一月」

 } 
     //moving to previous year 
     else if (yearDiff < 0) { 
      for (int i = 0; i < (yearDiff * (-1)); i++) { 
       previousMonth.click(); 
      } 
     } 
    } 
} 

如果我想在2016年內搜索一個日期,我知道第一個遇到的月份是「2016年12月」。 請告訴我如何將合適的導航邏輯合併到用戶插入的月份。提前致謝。

回答

1

它取決於您的日期選擇器行爲。僅供參考我下面的日期選擇器的結構:

enter image description here

如果點擊「2017年十月」頁眉然後打開個月的選擇,如下圖:

enter image description here

並再次點擊「 2017「標題然後打開選擇年份

enter image description here

所以這裏的自動化測試用例將

  1. 獲取日期爲2017年10月25日
  2. 拆分在3塊
  3. 點擊標題數據和導航,直到它顯示年列表選擇
  4. 導航日曆收到一年即2017年
  5. 然後瀏覽和選擇的月份,即收到十月
  6. 最後選擇的日期即

在這裏找到示例代碼:

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; 
     } 
    } 
} 
相關問題