當時腦海先是閃過利用Sikuli來幫我開網頁點按鈕輸入資料做這些苦工,卻意外發現了Selenium IDE,讓我眼睛為之一亮。在接下來的幾天我就改用Selenium IDE錄製好測試案例,輕鬆地完成自動化UAT。然而Selenium IDE只支援FireFox,當時開發的系統主要還是以IE為主,所以又開始尋找可以以IE進行網頁自動化測試的方式。當時使用了WatiN,也成功地寫了些測試程式。
以上是題外話,目前的團隊相當重視測試,團隊成員不僅需要撰寫單元/整合測試,也需要知道如何撰寫Selenium測試,以便讓build server進行自動化測試,也因此發現原來Selenium也已經提供WebDriver機制讓.NET開發人員可以在VS裡針對不同的瀏覽器撰寫相同的測試程式。以下介紹如何使用Selenium WebDriver來進行網頁自動化測試,所使用的瀏覽器為Chrome。
首先建立兩個demo用的專案,一個為ASP.NET MVC 5專案SeleniumDemo,另一個為Class Library專案SeleniumDemo.Tests,並加入了Microsoft.VisualStudio.QualityTools.UnitTestFramework參考。
在SeleniumDemo.Tests專案中透過NuGet指令Install-Package Selenium.WebDriver加入Selenium WebDriver參考。
至http://chromedriver.storage.googleapis.com/index.html下載Chrome Driver,Chrome Driver為Selenium WebDriver啟動Chrome會使用到的執行檔(chromedriver.exe),並存放在tools資料夾裡。
確認ASP.NET MVC 5專案預設的網站可以正常執行後,我們要模擬使用者點選Register連結,看看使用者是否有被導向註冊頁面。
using System.IO; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; namespace SeleniumDemo.Tests { [TestClass] public class AccountTests { [TestMethod] public void Can_Display_Register_Page() { string chromeDriverDirectory = string.Format(@"{0}\..\..\..\tools", Directory.GetCurrentDirectory()); IWebDriver driver = new ChromeDriver(chromeDriverDirectory); driver.Navigate().GoToUrl("http://localhost:64872/"); IWebElement registerLink = driver.FindElement(By.Id("registerLink")); registerLink.Click(); Assert.AreEqual("http://localhost:64872/Account/Register", driver.Url); driver.Quit(); } } }在以上程式碼中,我們設定了Chrome Driver(chromedriver.exe)的實體位置給WebDriver後,便透過WebDriver開啟瀏覽器導向網站首頁,找出Register連結並點選它,最後驗證導向後的網址是否為註冊頁面的網址,成功地話瀏覽器就會被關閉。這個測試案例很簡單,雖然有個小問題,例如測試失敗的話,瀏覽器就不會被關閉。但做為demo,我想這樣已經足夠。完整的範例專案可由https://github.com/petekcchen/blog/tree/master/SeleniumDemo下載。
No comments:
Post a Comment