显示循环直到月份c#

时间:2016-09-26 13:22:50

标签: c# selenium-webdriver

编辑 - 好的,我的日历结构如下

< September 2016 >

现在我想指定一个月(2016年1月)并点击右箭头直到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">

我尝试了下面的代码,但它没有用(NB我没有使用该方法点击本例中的下个月)

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

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

  1. 我首先要看看是否有办法可以跳到正确的月份。查看URL并查看是否有可以设置的参数,例如...?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);
        }
    }
    
  3. 然后你会称之为

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

    注意:您需要确保始终将targetDate天创建为1.当您从页面上抓取月份/年份并将其转换为DateTime时将永远是第1天。如果你没有在第1天都拥有它们,你将会无限循环。