一直很想找个工具来进行自动化测试,不然每次靠自己的脑袋记忆和双手去点击实在太辛苦了,也非常SB,不是吗?
之前试过VS里面的一些测试功能,总觉得不太好用,且比较复杂。
最近无意中发现Selenium WebDriver,试了之后还是觉得不错的。
首先你需要去下载安装,可以到http://docs.seleniumhq.org/download/去下载相对应的安装包,不过近阶段可能需要一些特殊的途径才能下载到,懂得自然懂,自己想办法吧!哈哈。
然后按照这个帖子http://www.iquicktest.com/openqa-selenium-2-3-0.html,就可以在firefox上安装插件了,然后我尝试了录制几个demo进行测试,感觉还不错,虽然这个plugin做的还不是非常好用,UI也不够nice。
这是我录制的demo。
注意,在录制过程中,可能由于浏览器的自动记录功能,会省略某些element的收录,比如password等,这时候就需要你自己去完善了。
虽然已经有了demo,但是我还是需要写代码来实现自动测试,下面是我的测试代码。
IWebDriver driver = new FirefoxDriver();
//Notice navigation is slightly different than the Java version
//This is because 'get' is a keyword in C#
driver.Navigate().GoToUrl("http://localhost/LISA.KenticoCMS.3.0/");
// username
IWebElement username = driver.FindElement(By.Id("plc_lt_zoneMenu_LISA_LogonForm_Login1_UserName"));
username.SendKeys("Manager3");
// password
IWebElement password = driver.FindElement(By.Id("plc_lt_zoneMenu_LISA_LogonForm_Login1_Password"));
password.SendKeys("Manager1");
// login button
IWebElement loginbutton = driver.FindElement(By.Id("plc_lt_zoneMenu_LISA_LogonForm_Login1_LoginButton"));
loginbutton.Click();
//IWebElement element = (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript("$('.kw1').css('display','block'); ");
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until((d) => { return d.Url.ToLower().Contains("contract"); });
// checkbox
IWebElement checkbox = driver.FindElement(By.Id("plc_lt_zoneMain_pageplaceholder_pageplaceholder_lt_zonePoints_French_GenericPointsSplitUp_gvMembers_ctl05_chkSelected"));
checkbox.Click();
// points
IWebElement points = driver.FindElement(By.Id("plc_lt_zoneMain_pageplaceholder_pageplaceholder_lt_zonePoints_French_GenericPointsSplitUp_gvMembers_ctl05_txtPoints"));
points.SendKeys("100");
// comment
IWebElement comment = driver.FindElement(By.Id("plc_lt_zoneMain_pageplaceholder_pageplaceholder_lt_zonePoints_French_GenericPointsSplitUp_gvMembers_ctl05_txtComment"));
comment.Click();
System.Threading.Thread.Sleep(5000);
comment.SendKeys(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"));
// save button
IWebElement savebutton = driver.FindElement(By.Id("plc_lt_zoneMain_pageplaceholder_pageplaceholder_lt_zonePoints_French_GenericPointsSplitUp_btnSaveBottom"));
savebutton.Click();
System.Threading.Thread.Sleep(5000);
// Wait for the page to load, timeout after 10 seconds
WebDriverWait wait1 = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
//wait.Until((d) => { return d.FindElement(By.Id("plc_lt_zoneMain_pageplaceholder_pageplaceholder_lt_zonePoints_French_GenericPointsSplitUp_btnConfirmTop")); });
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("plc_lt_zoneMain_pageplaceholder_pageplaceholder_lt_zonePoints_French_GenericPointsSplitUp_btnConfirmTop")));
// confirm button
IWebElement confirmbutton = driver.FindElement(By.Id("plc_lt_zoneMain_pageplaceholder_pageplaceholder_lt_zonePoints_French_GenericPointsSplitUp_btnConfirmTop"));
confirmbutton.Click();
// Wait for the page to load, timeout after 10 seconds
WebDriverWait wait2 = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
//System.Console.WriteLine("Page title is: " + driver.Title);
lbl1.Text = "Page title is: " + driver.Title;
//Close the browser
driver.Quit();
这段代码可以实现登录并实现一个提交数据的测试,不过这里面有个问题,Modal dialog present,也就是下面这个帖子提到的,
http://blog.csdn.net/old_imp/article/details/11417999
也就是说,页面有些ajax效果,但是测试软件无法识别,因为在你人工去点击的时候是不会有这样的问题发生,比如你点击某个控件,然后页面出现mask,但是测试软件却傻眼了,就只能报错了。
最后只能用sleep方法解决,而WebDriverWait还是不能解决这个问题,即使我设置了不同的条件也无法通过。
总得来说,这玩意还是不错的,有使用价值,对于需要简单的自动化测试的场景,比如一个复杂模块修改完之后,就可以跑一篇,防止出现未知的或者重新出现已知的bug。