2016-09-26 73 views
-1

編輯 - 好吧,我已經壓光機結構如下循環通過幾個月,直到一個月顯示C#

< September 2016 > 

現在我要指定一個(一月2016),並把它按一下右箭頭,直到2016年1月出現

現在元件的結構如下

<div class="calendar"> 
<h3 id="calendar-month" class="calendar-title" title="September 2016"   
role="heading" aria-live="assertive" aria-atomic="true">September 2016</h3> 
<table class="calendar-grid" role="grid" aria-labelledby="calendar-month"> 

我想下面的代碼,但它沒有工作(注:我還沒有使用的方法點擊下個月在這個例子中)

  public static void MonthOut(string month) 
    { 
     var nextMnthOutBtn = DriverContext.Driver.FindElement(By.XPath(".//*[@title='Go to the next month']")); 
     var calMonth = DriverContext.Driver.FindElement(By.ClassName("calendar")); 

     IList<IWebElement> allValidDates = calMonth.FindElements(By.Id("calendar-month")); 

     foreach (var date in allValidDates) 
      if (date.Text.Equals(month)) 
      { 
       break; 
      } 
    } 
+0

你想要顯示哪個月作爲默認值? –

+0

默認月份是當前月份。所以我想指定一月份。它進入頁面。忽略當前顯示的月份(除非它符合我指定的內容),然後開始點擊下個月的箭頭,直到1月份出現,然後停止 –

回答

0

有你可以做到這一點的幾種方法。

  1. 我首先看看是否有辦法跳到正確的月份。查看網址並查看是否有可設置的參數,例如...?month=9&year=2016或類似的東西。如果是這樣並且符合您的要求,請使用該方法。它會更快,更快。

  2. 如果你不能做到#1,我會寫有點像你這樣一個功能,而是採取在DateTime參數爲targetDate(你需要一個月年)。將網頁上的月份/年份與目標日期進行比較,並確定您是需要點擊右側的+1個月還是點擊左側的-1個月。繼續這樣做直到當前月份/年份=目標月份/年份。下面是該函數的一些示例代碼。

    public static void ChangeCalendarMonth(DateTime targetDate) 
    { 
        By currentDateLocator = By.Id("calendar-month"); 
        By leftArrowLocator = By.Id("some locator"); 
        By rightArrowLocator = By.Id("some locator"); 
    
        // read current calendar date from page 
        DateTime currentDate = DateTime.Parse(Driver.FindElement(currentDateLocator).Text); 
        int compare = DateTime.Compare(currentDate, targetDate); 
        while (compare != 0) 
        { 
         if (compare < 0) 
         { 
          // click right to +1 month 
          Driver.FindElement(rightArrowLocator).Click(); 
         } 
         else 
         { 
          // click left arrow to -1 month 
          Driver.FindElement(leftArrowLocator).Click(); 
         } 
    
         // read current calendar date from page 
         currentDate = DateTime.Parse(Driver.FindElement(currentDateLocator).Text); 
         compare = DateTime.Compare(currentDate, targetDate); 
        } 
    } 
    

,然後你會這樣稱呼它

DateTime targetDate = new DateTime(2017, 1, 1); // January 2017 
ChangeCalendarMonth(targetDate); 

注意:您要確保您始終創建targetDate的一天1.當你搶到月/一年關閉並將其轉換爲DateTime它將始終是第1天。如果您沒有將它們都作爲第1天,那麼您將最終陷入無限循環。