在構建自動化套件的過程當中,日期操做是一件很重要也很頻繁的事情。有的日期控件的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(); }