[原創] Web UI 自動化日期控件的處理

在構建自動化套件的過程當中,日期操做是一件很重要也很頻繁的事情。有的日期控件的div層級結構複雜,同一個類型的日期控件在多個子系統中的表現形式也截然不同。多數工程師爲了不重複的工做,會封裝抽象一個方法或公共的庫,還有部分會封裝成單獨的日期類庫。html

控件

下面是去啊的日期控件spa

 

下面是相關的HTMLcode

 

固然,有的日期控件元素的id爲對應的日期。htm

代碼邏輯

針對這種雙日期的格式,咱們如何在代碼中進行處理輸入?blog

1.      輸入目標日期。element

2.      判斷目標日期與當前日期的差值get

-         目標日期的年小於當前日期的年it

l                 小於的狀況同大於(以下)自動化

-         目標日期的年等於當前日期的年io

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();
        }
相關文章
相關標籤/搜索