近日埋首伏案于自动化用例,发现日期输入框很难选中,尤甚不同业务前台命名、风格差异性之大,致使我们的自动化也不得不跟着随机变化。最初自动化的代码有如下写法:
newActions(driver).MoveToElement(driver.FindElement(By.Id("日期输入框ID"))).Click().Perform();
driver.FindElement(By.Id(String.Format("d_{0}", "日期值"))).Click();
这是属于比较传统的绝学,就像降龙十八掌,一招一式有板有眼,第一步点击、第二步选择,堂堂正正,对一般规范的前台来说是可以胜任日期选择功能的。
自然也有一些不太规范的前台界面,这时第一式武学就像一拳打在棉花上,不受力,对于不规范的前台代码,我们同样也需要剑出偏锋,比如:
SeleniumFun.SetPupUpInput(driver,By.Id("日期输入框ID"),By.Id("日历ID"),
By.Id(String.Format("{0}_calendar1", "日期值")));
此招式正如江湖传说的小李飞刀,所谓天下武功唯快不破,此式正如羚羊挂角,无迹可寻,谈笑间樯橹灰飞烟灭。
然则武功再高也怕菜刀,碰上有时服务器逗你玩带宽不给力脚本一直Load啊load不完,肿么办?不着急,咱家还有一计:
driver.FindElement(By.Id("日期输入框ID")).Clear();
driver.FindElement(By.Id("日期输入框ID")).SendKeys("日期值");
此式可谓瞒天过海,直捣黄龙。避开繁杂的ID选择直接输入数值,通过大系统的判断规则径自进入下一步流程。名门正派或许看不上此种小道,然则三千大道,小道亦可证乾坤。
卷尾语:正所谓因地制宜,对症下药,UI代码不但多变,而且估计会持续的继续的良久的多变下去,从来没有万金油的代码,我们的自动化同样的需要流水不腐,户枢不蠹。
正所谓岁月如飞刀,刀刀催人老,UI代码日新月异,江湖经过了太久的平静,却不想又起波澜。
话说高铁网站的时间输入框曾是**稳定的代言词,也是英雄儿女的温柔乡,多年不曾变化的UI没曾想却是暗流涌动,各路代码纷纷败下阵来,大帅大声喝到:“何人能取其首级!”
中军帐下一时竟是鸦雀无声。
突然间一个银甲白袍小将分开众将士,拜至案前:“某愿为大帅分忧!”
大帅闻言大喜,招左右上前,亲手端起一杯温酒递给白袍小将:“将军且饮胜此杯以壮胆气!”
白袍小将却道:“待我斩却此獠再饮未迟!”
说完拍马向前,一时间竟声势无两:
driver.FindElement(By.Id(日期输入框ID)).Click();
string js = "document.getElementById(日期输入框ID).value='" +日期值+ "'";
((IJavaScriptExecutor)driver).ExecuteScript(js);
顷刻间时间已经选好,此时酒且尚温!