zoukankan      html  css  js  c++  java
  • [原创] Web UI 自动化日期控件的处理

    在构建自动化套件的过程中,日期操作是一件很重要也很频繁的事情。有的日期控件的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();
            }
  • 相关阅读:
    leetcode204-统计质数个数之一步步调试超时
    SpringBoot-注解一句话
    算法-总结规律
    kafka-版本变更相关
    异步线程池如何做同步业务
    es-快捷DSL检索手记
    并发学习第七篇——ThreadPoolExecutor
    kafka-consumer端的设计细节
    kafka-producer使用总结
    kafka-topic重要配置分析
  • 原文地址:https://www.cnblogs.com/devtesters/p/4274423.html
Copyright © 2011-2022 走看看