2015年3月9日

[軟體自動測試] - Web UI 自動化測試工具 - Selenium IDE 與 WebDriver 實作

Selenium是一套紀錄UI操作流程的工具,它可以記錄你在瀏覽器上的各種動作,以及網頁本身經由操作後該有的反應,並做其驗證,這篇將介紹如何使用它以及透過C#改寫在Visual Studio測試專案裡。

Selenium最初是由一家位於美國芝加哥軟體公司ThoughtWorks在2004年所開發,作為JavaScrptTestRuner的核心。爾後一位日本人Shinya Kasatani對於Selenium相當感興趣,並且將它與Firefox結合實現擷取網頁行為作為驗證的工具




目前使用的方式分為三種 :

1. Selenium IDE 
2. Selenium Remote Control
3. Selenium WebDriver
4. Selenium Grid

支援各種瀏覽器使用,詳細請參考Selenium下載頁面
這篇主要介紹IDE以及Remote Control C#


1. Selenium IDE

1. 安裝Firefox Selenium擴充套件
2. 兩個方法打開Selenium
    (1) [工具] -> Selenium IDE
    (2) Ctrl + Shift + s
3. 開啟後在Base URL填入受測網址 並點選紅點開始紀錄點選步驟



4. 在Google搜尋打上Germany 並按下搜尋 (注意不能使用鍵盤Enter鍵 否則Selenium無法紀錄)



5. 進入搜尋結果頁面後,可以假定我們要驗證是否會出現"德國"的字樣,將他框起來選擇Asserttext css=div.kno-ecr-pt.kno-fb-ctx 德國,選擇完後這一項驗證為最後一個步驟



6. 這時回頭看Selenium IDE它已經幫我們記錄剛剛所有的動作了,按Play Entire test suit按鈕Selenium會依照步驟再run一次



7. 這樣一個Test Case可以被轉成不同語言,在這選擇C# NUnit / Remote Control




輸出後會將每個步驟轉換成C# Code
[TestFixture]
    public class Example
    {
        private IWebDriver driver;
        private StringBuilder verificationErrors;
        private string baseURL;
        private bool acceptNextAlert = true;
        
        [SetUp]
        public void SetupTest()
        {
            driver = new FirefoxDriver();
            baseURL = "http://localhost:23618/";
            verificationErrors = new StringBuilder();
        }
        
        [TearDown]
        public void TeardownTest()
        {
            try
            {
                driver.Quit();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
            Assert.AreEqual("", verificationErrors.ToString());
        }
        
        [Test]
        public void TheExampleTest()
        {
            driver.Navigate().GoToUrl(baseURL + "/index.aspx");
            driver.FindElement(By.Id("money")).Clear();
            driver.FindElement(By.Id("money")).SendKeys("1980");
            driver.FindElement(By.Id("money")).Clear();
            driver.FindElement(By.Id("money")).SendKeys("1980");
            driver.FindElement(By.Id("dosomething")).Click();
            driver.FindElement(By.Id("dosomething")).Click();
            Assert.AreEqual("九折 : 1782", driver.FindElement(By.Id("90")).Text);
        }
        private bool IsElementPresent(By by)
        {
            try
            {
                driver.FindElement(by);
                return true;
            }
            catch (NoSuchElementException)
            {
                return false;
            }
        }
        
        private bool IsAlertPresent()
        {
            try
            {
                driver.SwitchTo().Alert();
                return true;
            }
            catch (NoAlertPresentException)
            {
                return false;
            }
        }
        
        private string CloseAlertAndGetItsText() {
            try {
                IAlert alert = driver.SwitchTo().Alert();
                string alertText = alert.Text;
                if (acceptNextAlert) {
                    alert.Accept();
                } else {
                    alert.Dismiss();
                }
                return alertText;
            } finally {
                acceptNextAlert = true;
            }
        }
    }


到這個步驟後,也許大家有些納悶要如何使用這C#的Code,它是沒辦法直接使用的,接著在同一個solution開啟測專案,並將匯出的檔案載入至專案中,接著開啟一個新的Unit test



將輸出的檔案擷取其中 [SetUp]與  [Test]放入到新增的[TestMethod]
 
        [TestMethod]
        public void TheExampleTest()
        {
            driver = new FirefoxDriver();
            baseURL = "http://kunyao.selenium/";
            verificationErrors = new StringBuilder();

            driver.Navigate().GoToUrl(baseURL + "/index.aspx");
            driver.FindElement(By.Id("money")).Clear();
            driver.FindElement(By.Id("money")).SendKeys("1980");
            driver.FindElement(By.Id("money")).Clear();
            driver.FindElement(By.Id("money")).SendKeys("1980");
            driver.FindElement(By.Id("dosomething")).Click();
            driver.FindElement(By.Id("dosomething")).Click();
            Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual("九折 : 1782", driver.FindElement(By.Id("90")).Text);
        }

開始run測試方案時會自動打開Firefox並照著指令run一遍,若順利就會打勾囉


1 則留言:

<Javascript> How to uncompressed GZIP at front-end using Javascript

It's been a while I haven't share my coding work. In this article I would like to share how to receive a Gzip file via stream, unzip...