Dev Notes: UI自動化測試 - 1

in


開發Web應用系統時,不免總是需要透過UI的操作,來驗證驗證屬於UI上的邏輯、UI與商業邏輯層的整合邏輯…etc。一旦發現bugs,修改完成後,又要再重新手動操作一次,如果同樣情形來來回回幾遍後,這將是一件累人繁瑣的工作項目。此外不同的軟體角色(Architect、PM、SA、RA、QA、Developer)經常對於同樣畫面操作邏輯進行手動驗證,因此開始有人思考為何不把這些測試情節透過程式碼,來自行自動化的UI測試呢?不少軟體公司都成功開發出自動測試的產品,但價格都相當昂貴;然而還好透過Open Source社群努力,我們仍能找到不少免費的測試Framework,在Web的免費測試Framework中,屬於.NET社群的有WatiN、WebAii Testing Framework…etc,屬於Java社群的有Canoo WebTest, JWebUnit, WebDriver, JSFUnit, Celerity…etc。


以下我將先介紹.NET的WatiN,WatiN的全名為Web Application Testing In .Net
可以在http://watin.sourceforge.net/中下載其Framework。WatiN的由來是受到Watir的啟發,在2005年的12月推出第一個版本,目前的版本已經來到2.0 Release candidates。它同時支援IE及FireFox,也支援目前普遍的AJAX網站,更多的功能特點可以到其官網瀏覽。


瀏覽完官網後,總是要動手做做看,感受一下WatiN實際使用時,會給我們帶來何種感受。首先下載好WatiN,打開Visual Studio,建立一個Console Project,接著把WatiN.Core.dll加入至Reference。



在開始動手寫Code前,我們必須先設定ApartmentState為single-threaded,
因此我們在Main上面宣告[STAThread]的屬性。至於為何要這樣設定?以下為WatiN官網的解釋


Why is setting the ApartmentState needed in the first place?
Copied from MSDN:
“Because COM classes use apartments, the common language runtime needs to create and initialize an apartment when calling a COM object in a COM interop situation. A managed thread can create and enter a single-threaded apartment (STA) that allows only one thread, or a multithreaded apartment (MTA) that contains one or more threads.”.
Since Internet Explorer is not Thread safe we need to use STA.


接著我們要利用Code幫我們完成以下動作:
1. 利用IE開啟[HSDc網站(http://www.hsdc.com.tw/)]
2. 連接到[文檔下載區]
3. 下載[Sequence Generator Plugin beta-1]

using System;
using System.Collections.Generic;
using System.Text;
using WatiN.Core;

namespace TestWatiN
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            // 開啟IE,並連結至HSDc網站
            IE ie = new IE("http://www.hsdc.com.tw");
            // 找到[文檔下載區]的HyperLink,並點點它
            ie.Link(Find.ByTitle("關於 HSDc. 相關的文件、檔案下載區。")).Click();
            // 找到[Sequence Generator Plugin beta-1]的HyperLink,並點點它
            ie.Link(Find.ByUrl("http://files.hsdc.idv.tw/src/products/HSDcSeq-Beta-Build012.rar")).Click(); 
            // 註解的程式碼為關閉IE
            //ie.Close();
        }
    }
}

在上述程式碼中,我們可以看到它的使用方式相當直覺,像ie.Link(Find.ByTitle("關於 HSDc. 相關的文件、檔案下載區。")).Click()這一行;整個感覺就像是ie上面的HyperLink藉由Title來找到,在點選此HyperLink。而Find這個Class中的Method有各種找到Html Element的方式,ex: byId、byValue…etc。要如何快速找到Html Element中的資訊,我們可以藉由瀏覽器的開發者工具查詢,目前IE8,FireFox以及Google Chrome皆有類似的工具。



實際動手Try過後,可以發現WatiN是個相當容易上手的Framework。下一篇將會為大家介紹WatiN如何與Nunit結合。