共用方式為


消費者介面自動化測試程式庫

消費者介面自動化測試程式庫 (UIA 測試程式庫) 是自動化測試案例中驅動程式應用程式呼叫的 API。 驅動程式是應用程式,可從需要驗證的控制項) 取得IUIAutomationElement物件 (自動化元素,並將它提供給消費者介面自動化測試程式庫。 然後,測試程式庫會檢查並驗證消費者介面自動化實作。 若要深入瞭解消費者介面自動化和自動化元素,請參閱消費者介面自動化基本概念

消費者介面自動化測試程式庫工作流程

下圖顯示一個測試工作流程,其中包含使用主控台應用程式作為驅動程式的 消費者介面自動化 測試程式庫。 在此情況下,驅動程式會啟動 Notepad.exe 實例,並從編輯控制項取得 IUIAutomationElement 物件) (。 接下來,驅動程式會根據所測試的 UI 平臺建立消費者介面自動化測試程式庫物件,然後將自動化元素當做參數傳入。 消費者介面自動化測試程式庫會判斷自動化專案是控制項類型,然後執行檔控制項測試、文字捲動控制項模式測試,以及一般自動化元素測試。

此圖顯示使用紅色箭號將驅動程式到應用程式到驅動程式到 UIATestLibrary 的流程。

使用 消費者介面自動化 測試程式庫進行記錄

消費者介面自動化測試程式庫會使用外部 DLL 來記錄測試回合的結果。 它支援以 XML 身分記錄和記錄到主控台。

XML 記錄

XML 記錄通常是由 Visual 消費者介面自動化 Verify 使用,但也可以併入命令列工作流程中。

如果指定了 XML 記錄,驅動程式應用程式必須藉由建立 XmlWriter 物件並將它傳遞至 XmlLog.GetTestRunXml 方法來序列化輸出。 驅動程式接著可以在內部使用序列化 XML,或將它寫入檔案。

XML 記錄需要下列 DLL。

  • WUIALogging.dll
  • WUIALoggerXml.dll

主控台記錄

根據預設,消費者介面自動化測試程式庫會使用主控台記錄,其中所有記錄輸出都會以純文字傳送至主控台視窗。 主控台記錄需要WUIALogging.dll。

記錄的程式碼需求

驅動程式應用程式必須包含下列程式碼片段,才能使用消費者介面自動化測試程式庫記錄。

\\ Include logging functionality.
using Microsoft.Test.UIAutomation.Logging;

...

\\ Select a logger.
UIAVerifyLogger.SetLoggerType(LogTypes.DefaultLogger | 
                              LogTypes.ConsoleLogger | 
                              LogTypes.XmlLogger);

...

\\ Output comment to selected logger.
UIAVerifyLogger.LogComment("...");

記錄範例

下列範例示範基本的記錄功能,並示範如何在基本測試自動化驅動程式應用程式中使用 消費者介面自動化 測試程式庫 API。

//---------------------------------------------------------------------------
//
// Description: Sample logger.
//
//---------------------------------------------------------------------------
using System;

namespace WUITest
{
    using Microsoft.Test.UIAutomation.Logging;

    public sealed class TestMain
    {
        private TestMain() { }

        /// -----------------------------------------------------------------
        /// <summary>
        /// Entry point
        /// </summary>
        /// -----------------------------------------------------------------
        [STAThread]
        static void Main(string[] args)
        {
            // Call SetLogger() if you don't want to use the default logger.
            // To set the logger type, call SetLogger(<string>).
            // <string> can be specified from the command line or from the 
            // the UI Automation Test Library enumeration:
            //  
            //     Logger.SetLogger(LogTypes.ConsoleLogger);
            //     Logger.SetLogger(LogTypes.DefaultLogger);

            Logger.SetLogger(LogTypes.DefaultLogger);

            Logger.StartTest("Test 1");
            Logger.LogComment("This is a comment");
            Logger.LogError(new Exception("My error"), false);
            Logger.EndTest();

            Logger.StartTest("Test 2");
            Logger.LogComment("This is a second comment");
            Logger.LogPass();
            Logger.EndTest();

            Logger.ReportResults();

        }
    }
}
//---------------------------------------------------------------------------
//
// Description: Sample test automation.
//
//---------------------------------------------------------------------------

using System;
using System.Windows;

namespace WUITest
{
    using System.Diagnostics;
    using System.Threading;
    using System.Windows.Automation;
    using Microsoft.Test.UIAutomation;
    using Microsoft.Test.UIAutomation.Core;
    using Microsoft.Test.UIAutomation.TestManager;
    using Microsoft.Test.UIAutomation.Tests.Controls;
    using Microsoft.Test.UIAutomation.Tests.Patterns;
    using Microsoft.Test.UIAutomation.Tests.Scenarios;
    using Microsoft.Test.UIAutomation.Logging;

    public sealed class TestMain
    {

        // Time in milliseconds to wait for the application to start.
        static int MAXTIME = 5000;
        // Time in milliseconds to wait before trying to find the application.
        static int TIMEWAIT = 100; 

        /// -------------------------------------------------------------------
        /// <summary>
        /// Start Notepad, obtain an AutomationElement object, and run tests.
        /// </summary>
        /// -------------------------------------------------------------------
        [STAThread]
        static void Main(string[] args)
        {
            // Dump the information to the console window.  
            // Use a different LogTypes value if you need to dump to another logger, 
            // or create your own logger that complies with the interface.
            UIAVerifyLogger.SetLoggerType(LogTypes.ConsoleLogger);

            // Get the automation element.
            AutomationElement element = StartApplication("NOTEPAD.EXE", null);

            // Call the UI Automation Test Library tests.
            TestRuns.RunAllTests(element, true, TestPriorities.Pri0, 
                    TestCaseType.Generic, false, true, null);

            // Clean up.
            ((WindowPattern)element.GetCurrentPattern(WindowPattern.Pattern)).Close();

            // Dump the summary of results.
            UIAVerifyLogger.ReportResults();
        }

        /// -------------------------------------------------------------------------
        /// <summary>
        /// Start the application and retrieve its AutomationElement. 
        /// </summary>
        /// -------------------------------------------------------------------------
        static public AutomationElement StartApplication(string appPath, 
                string arguments)
        {
            Process process;

            Library.ValidateArgumentNonNull(appPath, "appPath");

            ProcessStartInfo psi = new ProcessStartInfo();

            process = new Process();
            psi.FileName = appPath;

            if (arguments != null)
            {
                psi.Arguments = arguments;
            }

            UIAVerifyLogger.LogComment("Starting({0})", appPath);
            process.StartInfo = psi;

            process.Start();

            int runningTime = 0;
            while (process.MainWindowHandle.Equals(IntPtr.Zero))
            {
                if (runningTime > MAXTIME)
                    throw new Exception("Could not find " + appPath);

                Thread.Sleep(TIMEWAIT);
                runningTime += TIMEWAIT;

                process.Refresh();
            }

            UIAVerifyLogger.LogComment("{0} started", appPath);

            UIAVerifyLogger.LogComment("Obtained an AutomationElement for {0}", appPath);
            return AutomationElement.FromHandle(process.MainWindowHandle);

        }
    }
}