2016-09-26 4 views
-1

編集cが表示されている - 今、私は(2016年1月)の月を指定したい[OK]を、私はカレンダーサイクルは#

< September 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月を指定するのは難しいです。それはページに行く。現在表示されている月を無視し(指定したものと一致しない限り)、1月が表示されるまで次の月の矢印をクリックして停止します –

答えて

0

(私はこの例では来月クリックする方法を使用しhaventはNB)私は以下のコードを試してみましたが、それは仕事didntはあなたがこれを行うことができますいくつかの方法があります。

  1. 正しい月にジャンプできる方法があるかどうかを確認することから始めます。 URLを見て、設定できるパラメータがあるかどうかを確認します(例: ...?month=9&year=2016など。そうであればそれがあなたの要求の範囲内にあるなら、その方法を使用してください。はるかに速くなるでしょう。あなたは#1を行うことができない場合は

  2. 、私はあなたがやったちょっとのような関数を書くが、(あなたが年の月を必要とする)targetDateためDateTimeパラメータにかかるだろう。ページ上の月/年を目標の日付と比較して、右クリックして+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); 

NOTEのようにそれを呼び出します:あなたは月につかむときあなたは常に1としてtargetDateの日を作成することを確認したくなるでしょう/年を1ページにしてDateTimeに変換すると、それは常に1日目になります。両方を1日目にしないと、無限ループに終わります。