首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 自動化測試實戰:Selenium WebDriver + AutoIt 30 分鐘入門

     編輯:關於.NET

專案引入持續整合自動化驗收測試,選用 Selenium WebDriver (瀏覽器自動化) 搭配 AutoIt (Windows 原生視窗處理),本文從 IDE 錄製到程式碼重構完整示範。

工具選型理由

工具定位優勢適用場景
Selenium WebDriverWeb UI 自動化多瀏覽器、多語言、W3C 標準、生態豐富網頁操作、驗證、截圖、等待策略
AutoItWindows GUI 自動化處理檔案上傳對話框、原生視窗、Flash、驅動程式安裝視窗WebDriver 無法觸及的 OS 級視窗

30 秒體驗:Selenium IDE 錄製 → C# 代碼

  1. 安裝 Firefox + Selenium IDE (側邊欄擴充功能)
  2. 設定 Base URL (如 `https://www.cnblogs.com/`) → 點擊紅點錄製
  3. 操作:搜尋框輸入「熬夜的蟲子」→ 點擊搜尋
  4. 點擊綠色播放驗證 → 切換 Format 為 `C# WebDriver` → 匯出

自動產生的測試代碼 (NUnit + WebDriver)

[TestFixture]
public class CnblogsSearchTest
{
    private IWebDriver _driver;
    private StringBuilder _errors;
    private const string BaseUrl = "https://www.cnblogs.com/";

    [SetUp]
    public void Setup()
    {
        _driver = new FirefoxDriver();
        _errors = new StringBuilder();
    }

    [TearDown]
    public void Teardown()
    {
        try { _driver.Quit(); } catch { }
        Assert.AreEqual("", _errors.ToString());
    }

    [Test]
    public void SearchTest()
    {
        _driver.Navigate().GoToUrl(BaseUrl);
        _driver.FindElement(By.Id("zzk_q")).Clear();
        _driver.FindElement(By.Id("zzk_q")).SendKeys("熬夜的蟲子");
        _driver.FindElement(By.CssSelector("input.search_btn")).Click();
        // 可加入斷言驗證結果頁關鍵字
    }

    private bool IsElementPresent(By by)
    {
        try { _driver.FindElement(by); return true; }
        catch (NoSuchElementException) { return false; }
    }
}

進階:處理檔案上傳對話框 (AutoIt)

WebDriver 無法操作 `` 觸發的 OS 原生對話框,需 AutoIt 協助。

AutoIt 腳本 (上傳.au3)

WinWait("[CLASS:#32770]", "", 3)          ; 等待開啟檔案對話框 (Win7/10 通用類別)
WinActivate("[CLASS:#32770]")
ControlFocus("[CLASS:#32770]", "", "[CLASS:Edit; INSTANCE:1]")
Send("E:\TestFiles\demo.avi")             ; 輸入完整路徑
ControlClick("[CLASS:#32770]", "開啟(&O)", "Button1") ; 點擊開啟按鈕
; 或發送快捷鍵
Send("!o")                                ; Alt+O
Send("{ENTER}")

C# 呼叫 AutoItX (需安裝 AutoItX3.dll 並註冊 COM)

using AutoItX3Lib;

public void UploadFile(IWebDriver driver, string filePath)
{
    // 觸發上傳對話框
    driver.FindElement(By.Id("fileUpload")).Click();
    
    // 等待對話框出現 (隱性等待不適用,需顯性等待或 Thread.Sleep)
    Thread.Sleep(1000);
    
    var autoIt = new AutoItX3();
    const string dialogTitle = "[CLASS:#32770]";
    
    autoIt.WinWait(dialogTitle, "", 3);
    autoIt.WinActivate(dialogTitle);
    autoIt.ControlFocus(dialogTitle, "", "[CLASS:Edit; INSTANCE:1]");
    autoIt.Send(filePath);
    autoIt.Sleep(100);
    autoIt.ControlClick(dialogTitle, "開啟(&O)", "Button1");
    autoIt.Sleep(100);
    autoIt.Send("!o");
    autoIt.Send("{ENTER}");
}

Page Object Model 重構 (生產級架構)

// 頁面封裝
public class HomePage
{
    private readonly IWebDriver _driver;
    private readonly WebDriverWait _wait;
    
    private IWebElement SearchBox => _driver.FindElement(By.Id("zzk_q"));
    private IWebElement SearchBtn => _driver.FindElement(By.CssSelector("input.search_btn"));

    public HomePage(IWebDriver driver)
    {
        _driver = driver;
        _wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    }

    public void Search(string keyword)
    {
        SearchBox.Clear();
        SearchBox.SendKeys(keyword);
        SearchBtn.Click();
    }

    public ResultPage GoToResultPage() => new ResultPage(_driver);
}

// 測試案例
[Test]
public void Search_WithKeyword_ShouldShowResults()
{
    var home = new HomePage(_driver);
    home.Navigate();
    home.Search("Selenium WebDriver");
    var result = home.GoToResultPage();
    Assert.IsTrue(result.HasResults());
}

CI 整合建議

  • 建置伺服器安裝 **Headless Chrome/Firefox** + **Xvfb** (Linux) 或 **Windows Server** + 真實瀏覽器
  • 測試專案輸出 `trx`/`junit` 格式結果,整合至 Azure DevOps / Jenkins / GitHub Actions
  • 截圖失敗時自動附加至測試報告 (`_driver.TakeScreenshot()`)
  • 平行執行:`[Parallelizable]` (NUnit 3) + Selenium Grid / Docker Selenium

自動化測試非銀彈,**維護成本高**、**脆弱性強** (UI 變動即失效)。建議:核心流程 (登入、下單、支付) 自動化,邊緣功能人工驗證;優先投資 API 測試 (成本低、穩定、快)。

資源連結

  • Selenium 官網:https://www.seleniumhq.org/
  • AutoIt 官網:https://www.autoitscript.com/site/
  • WebDriver 文件:https://www.selenium.dev/documentation/webdriver/
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved