Knihovna testů automatizace uživatelského rozhraní
Knihovna ui Automation Test Library (UIA Test Library) je rozhraní API, které volá ovladač aplikace ve scénáři automatizovaného testování. Ovladač je aplikace, která získá prvek automatizace (IUIAutomationElement objekt) z ovládacího prvku, který vyžaduje ověření, a poskytuje ho knihovně testů automatizace uživatelského rozhraní. Pak testovací knihovna zkontroluje a ověří implementaci automatizace uživatelského rozhraní. Další informace o automatizaci uživatelského rozhraní a prvcích automatizace najdete v tématu Základy automatizace uživatelského rozhraní.
- pracovního postupu knihovny testů automatizace uživatelského rozhraní
- protokolování pomocí knihovny testů automatizace uživatelského rozhraní
- protokolování XML
- protokolování konzoly
- požadavky na kód pro protokolování
- Příklady protokolování
Pracovní postup knihovny testů automatizace uživatelského rozhraní
Následující diagram znázorňuje testovací pracovní postup, který zahrnuje knihovnu testů automatizace uživatelského rozhraní pomocí konzolové aplikace jako ovladače. V tomto případě ovladač spustí instanci Notepad.exe a získá prvek automatizace (tj. IUIAutomationElement objekt) z ovládacího prvku pro úpravy. Dále ovladač vytvoří objekt knihovny testů automatizace uživatelského rozhraní na základě otestované platformy uživatelského rozhraní a pak předá prvek automatizace jako parametr. Knihovna testů automatizace uživatelského rozhraní určuje, že prvek automatizace je typ ovládacího prvku Document a poté provede testy ovládacích prvků Document, Text a Scroll testy vzorů ovládacích prvků a obecné testy prvků automatizace.
Protokolování pomocí knihovny testů automatizace uživatelského rozhraní
Knihovna testů automatizace uživatelského rozhraní používá externí knihovny DLL k protokolování výsledků z testovacích běhů. Podporuje protokolování jako XML a protokolování do konzoly.
Protokolování XML
Protokolování XML obvykle používá ověřování automatizace vizuálního uživatelského rozhraní, ale může být také začleněno do pracovního postupu příkazového řádku.
Pokud je zadáno protokolování XML, aplikace ovladače musí serializovat výstup vytvořením XmlWriter objektu a předat jej XmlLog.GetTestRunXml metoda. Ovladač pak může serializovaný kód XML interně použít nebo jej zapsat do souboru.
Pro protokolování XML jsou vyžadovány následující knihovny DLL.
- WUIALogging.dll
- WUIALoggerXml.dll
Protokolování konzoly
Ve výchozím nastavení používá knihovna testů automatizace uživatelského rozhraní protokolování protokolování konzoly, kde se veškerý výstup protokolování předá jako prostý text do okna konzoly. WUIALogging.dll se vyžaduje pro protokolování konzoly.
Požadavky na kód pro protokolování
Aplikace ovladače musí obsahovat následující fragmenty kódu, aby bylo možné použít protokolování knihovny testů automatizace uživatelského rozhraní.
\\ 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("...");
Příklady protokolování
Následující příklady ukazují základní funkce protokolování a ukazují, jak používat rozhraní API knihovny pro automatizaci uživatelského rozhraní v základní aplikaci ovladače pro automatizaci testů.
//---------------------------------------------------------------------------
//
// 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);
}
}
}