消費者介面自動化測試程式庫
消費者介面自動化測試程式庫 (UIA 測試程式庫) 是自動化測試案例中驅動程式應用程式呼叫的 API。 驅動程式是應用程式,可從需要驗證的控制項) 取得IUIAutomationElement物件 (自動化元素,並將它提供給消費者介面自動化測試程式庫。 然後,測試程式庫會檢查並驗證消費者介面自動化實作。 若要深入瞭解消費者介面自動化和自動化元素,請參閱消費者介面自動化基本概念。
消費者介面自動化測試程式庫工作流程
下圖顯示一個測試工作流程,其中包含使用主控台應用程式作為驅動程式的 消費者介面自動化 測試程式庫。 在此情況下,驅動程式會啟動 Notepad.exe 實例,並從編輯控制項取得 IUIAutomationElement 物件) (。 接下來,驅動程式會根據所測試的 UI 平臺建立消費者介面自動化測試程式庫物件,然後將自動化元素當做參數傳入。 消費者介面自動化測試程式庫會判斷自動化專案是檔控制項類型,然後執行檔控制項測試、文字和捲動控制項模式測試,以及一般自動化元素測試。
使用 消費者介面自動化 測試程式庫進行記錄
消費者介面自動化測試程式庫會使用外部 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);
}
}
}