码迷,mamicode.com
首页 > Web开发 > 详细

[原创] Web UI 自动化日期控件的处理

时间:2015-02-05 13:27:41      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

在构建自动化套件的过程中,日期操作是一件很重要也很频繁的事情。有的日期控件的div层级结构复杂,同一个类型的日期控件在多个子系统中的表现形式也大相径庭。多数工程师为了避免重复的工作,会封装抽象一个方法或公共的库,还有部分会封装成单独的日期类库。

控件

下面是去啊的日期控件

技术分享

 

 

下面是相关的HTML

技术分享

 

当然,有的日期控件元素的id为对应的日期。

代码逻辑

针对这种双日期的格式,我们如何在代码中进行处理输入?

1.      输入目标日期。

2.      判断目标日期与当前日期的差值

-         目标日期的年小于当前日期的年

l                 小于的情况同大于(如下)

-         目标日期的年等于当前日期的年

l                 月份相差除以2,计算步长(即向后翻页的次数)

-         目标日期的年大于当前日期的年

l                 计算当年剩余月份数量

l                 计算从下一年开始到目标日期的月份

l                 月份相加计算出总额并除以2,得出向后翻页的次数。

3.      循环点击翻页。

4.      找到相应的html标签,点击即可。

最终版的代码

        internal static void InternalSelectDeliveryDate(IWebDriver driver, DateTime date)
        {
            DateTime expDate = ConvertToComparableDate(date);
            DateTime curDate = ConvertToComparableDate(DateTime.Now);

            int clicks = ((expDate.Year - curDate.Year) * 12 + (expDate.Month - curDate.Month)) / 2;
            Func<By, IWebElement> exp = (condition) => { return InternalFindElement(driver, condition, TimeSpan.FromSeconds(1)); };
            By by = By.ClassName("month_next");

            // We currently initialize the wrapDiv, previous, next element every time.
            // To avoid the invalid state exception.
            if (clicks < 0)
            {
                clicks = (-1) * clicks;
                by = By.ClassName("month_prev");
            }

            for (int i = 0; i < clicks; i++)
            {
                IWebElement navButton = exp(by);
                navButton.Click();
            }

            IWebElement targetLinkElem = InternalFindElement(driver, By.Id(expDate.ToString("yyyy-MM-dd")), TimeSpan.FromSeconds(1));
            targetLinkElem.Click();
        }

 

[原创] Web UI 自动化日期控件的处理

标签:

原文地址:http://www.cnblogs.com/devtesters/p/4274423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!