Testbibliotek för UI Automation
UIA-testbiblioteket (UI Automation Test Library) är ett API som anropas av drivrutinen program i ett automatiserat testscenario. Drivrutinen är det program som hämtar ett automationselement (IUIAutomationElement-objekt) från en kontroll som kräver verifiering och tillhandahåller det till UI Automation-testbiblioteket. Sedan kontrollerar och validerar testbiblioteket implementeringen av UI Automation. Mer information om automations- och automatiseringselement för användargränssnittet finns i grunderna i UI Automation.
Arbetsflöde för testbibliotek för UI Automation
Följande diagram visar ett testarbetsflöde som innehåller UI Automation-testbiblioteket med hjälp av ett konsolprogram som drivrutin. I det här fallet startar drivrutinen en instans av Notepad.exe och hämtar ett automationselement (dvs. ett IUIAutomationElement-objekt) från redigeringskontrollen. Därefter skapar drivrutinen ett UI Automation Test Library-objekt baserat på den användargränssnittsplattform som testas och skickar sedan automationselementet som en parameter. Testbiblioteket för användargränssnittsautomatisering avgör att automationselementet är en dokument kontrolltyp och kör sedan testerna för dokumentkontroll, Text och rullningslistning kontrollmönstertester och allmänna automationselementtester.
Loggning med UI Automation-testbiblioteket
Testbiblioteket för användargränssnittsautomatisering använder externa DLL:er för att logga resultat från testkörningar. Det stöder loggning som XML och loggning till konsolen.
XML-loggning
XML-loggning används vanligtvis av Visual UI Automation Verify, men den kan också införlivas i ett kommandoradsarbetsflöde.
Om XML-loggning anges måste drivrutinsprogrammet serialisera utdata genom att skapa ett XmlWriter- objekt och skicka det till metoden XmlLog.GetTestRunXml. Drivrutinen kan sedan använda den serialiserade XML-koden internt eller skriva den till en fil.
Följande DLL:er krävs för XML-loggning.
- WUIALogging.dll
- WUIALoggerXml.dll
Konsolloggning
Som standard använder UI Automation-testbiblioteket konsolloggning, där alla loggningsutdata skickas som oformaterad text till konsolfönstret. WUIALogging.dll krävs för konsolloggning.
Kodkrav för loggning
Ett drivrutinsprogram måste innehålla följande kodfragment för att använda UI Automation Test Library-loggning.
\\ 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("...");
Loggningsexempel
Följande exempel visar grundläggande loggningsfunktioner och visar hur du använder API:et för UI Automation-testbiblioteket i ett grundläggande testautomatiseringsdrivrutinsprogram.
//---------------------------------------------------------------------------
//
// 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);
}
}
}