Freigeben über


Benutzeroberflächenautomatisierung Testbibliothek

Die Benutzeroberflächenautomatisierung-Testbibliothek (UIA-Testbibliothek) ist eine API, die von der Treiberanwendung in einem automatisierten Testszenario aufgerufen wird. Der Treiber ist die Anwendung, die ein Automatisierungselement (IUIAutomationElement-Objekt) aus einem Steuerelement abruft, das eine Überprüfung erfordert, und dieses an die Benutzeroberflächenautomatisierung Testbibliothek bereitstellt. Anschließend überprüft und überprüft die Testbibliothek die Benutzeroberflächenautomatisierung Implementierung. Weitere Informationen zu Benutzeroberflächenautomatisierung- und Automatisierungselementen finden Sie unter Benutzeroberflächenautomatisierung Grundlagen.

Benutzeroberflächenautomatisierung Testbibliotheksworkflow

Das folgende Diagramm zeigt einen Testworkflow, der die Benutzeroberflächenautomatisierung Testbibliothek integriert, indem eine Konsolenanwendung als Treiber verwendet wird. In diesem Fall startet der Treiber eine instance von Notepad.exe und ruft ein Automatisierungselement (d. h. ein IUIAutomationElement-Objekt) aus dem Bearbeitungssteuerelement ab. Als Nächstes erstellt der Treiber ein Benutzeroberflächenautomatisierung Testbibliotheksobjekt basierend auf der getesteten UI-Plattform und übergibt dann das Automation-Element als Parameter. Die Benutzeroberflächenautomatisierung Testbibliothek bestimmt, dass das Automation-Element ein Dokumentsteuerelementtyp ist, und führt dann die Tests des Dokumentsteuerelements, die Text- und Scroll-Steuerelementmustertests und generische Automatisierungselementtests aus.

Diagramm, das den Fluss von Driver to Application to Driver zu UIATestLibrary mit roten Pfeilen zeigt.

Protokollierung mit der Benutzeroberflächenautomatisierung Testbibliothek

Die Benutzeroberflächenautomatisierung Testbibliothek verwendet externe DLLs, um Ergebnisse von Testläufen zu protokollieren. Es unterstützt die Protokollierung als XML und die Protokollierung in der Konsole.

XML-Protokollierung

Die XML-Protokollierung wird in der Regel von Visual Benutzeroberflächenautomatisierung Verify verwendet, kann aber auch in einen Befehlszeilenworkflow integriert werden.

Wenn die XML-Protokollierung angegeben ist, muss die Treiberanwendung die Ausgabe serialisieren, indem sie ein XmlWriter-Objekt erstellt und an die XmlLog.GetTestRunXml-Methode übergibt. Der Treiber kann dann das serialisierte XML intern verwenden oder in eine Datei schreiben.

Die folgenden DLLs sind für die XML-Protokollierung erforderlich.

  • WUIALogging.dll
  • WUIALoggerXml.dll

Konsolenprotokollierung

Standardmäßig verwendet die Benutzeroberflächenautomatisierung Testbibliothek die Konsolenprotokollierung, bei der die gesamte Protokollierungsausgabe als Nur-Text an das Konsolenfenster übergeben wird. für die Konsolenprotokollierung ist WUIALogging.dll erforderlich.

Codeanforderungen für die Protokollierung

Eine Treiberanwendung muss die folgenden Codeausschnitte enthalten, um Benutzeroberflächenautomatisierung Protokollierung der Testbibliothek zu verwenden.

\\ 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("...");

Protokollierungsbeispiele

Die folgenden Beispiele veranschaulichen die grundlegenden Protokollierungsfunktionen und zeigen die Verwendung der Benutzeroberflächenautomatisierung Testbibliotheks-API in einer grundlegenden Testautomatisierungstreiberanwendung.

//---------------------------------------------------------------------------
//
// 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);

        }
    }
}