Udostępnij przez


Biblioteka testów automatyzacji interfejsu użytkownika

Biblioteka testów automatyzacji interfejsu użytkownika (UIA Test Library) to interfejs API wywoływany przez sterownik aplikacji w scenariuszu zautomatyzowanego testowania. Sterownik jest aplikacją, która uzyskuje element automatyzacji (IUIAutomationElement obiektu) z kontrolki wymagającej weryfikacji i udostępnia ją do biblioteki testów automatyzacji interfejsu użytkownika. Następnie biblioteka testowa sprawdza i weryfikuje implementację automatyzacji interfejsu użytkownika. Aby dowiedzieć się więcej na temat automatyzacji interfejsu użytkownika i elementów automatyzacji, zobacz Podstawy automatyzacji interfejsu użytkownika.

Przepływ pracy biblioteki testów automatyzacji interfejsu użytkownika

Na poniższym diagramie przedstawiono testowy przepływ pracy, który zawiera bibliotekę testów automatyzacji interfejsu użytkownika przy użyciu aplikacji konsolowej jako sterownika. W takim przypadku sterownik uruchamia wystąpienie Notepad.exe i uzyskuje element automatyzacji (czyli obiektu IUIAutomationElement) z kontrolki edycji. Następnie sterownik tworzy obiekt biblioteki testów automatyzacji interfejsu użytkownika na podstawie testowanej platformy interfejsu użytkownika, a następnie przekazuje element automatyzacji jako parametr. Biblioteka testów automatyzacji interfejsu użytkownika określa, że element automatyzacji jest document typem kontrolki, a następnie wykonuje testy kontrolki Dokument, text i Scroll testy wzorca sterowania oraz ogólne testy elementów automatyzacji.

Diagram przedstawiający przepływ driver to Application to Driver to UIATestLibrary za pomocą czerwonych strzałek.

Rejestrowanie za pomocą biblioteki testów automatyzacji interfejsu użytkownika

Biblioteka testów automatyzacji interfejsu użytkownika używa zewnętrznych bibliotek DLL do rejestrowania wyników z przebiegów testów. Obsługuje rejestrowanie jako kod XML i rejestrowanie w konsoli programu .

Rejestrowanie XML

Rejestrowanie XML jest zwykle używane przez weryfikację automatyzacji interfejsu użytkownika wizualizacji, ale może być również włączone do przepływu pracy wiersza polecenia.

Jeśli określono rejestrowanie XML, aplikacja sterownika musi serializować dane wyjściowe, tworząc obiekt XmlWriter i przekazując go do metody XmlLog.GetTestRunXml. Sterownik może następnie wewnętrznie użyć serializowanego kodu XML lub zapisać go w pliku.

Do rejestrowania XML są wymagane następujące biblioteki DLL.

  • WUIALogging.dll
  • WUIALoggerXml.dll

Rejestrowanie konsoli

Domyślnie biblioteka testów automatyzacji interfejsu użytkownika używa rejestrowania konsoli, gdzie wszystkie dane wyjściowe rejestrowania są przesyłane potokami jako zwykły tekst do okna konsoli. WUIALogging.dll jest wymagany do rejestrowania konsoli.

Wymagania dotyczące kodu dotyczące rejestrowania

Aplikacja sterownika musi zawierać następujące fragmenty kodu, aby używać rejestrowania biblioteki testów automatyzacji interfejsu użytkownika.

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

Przykłady rejestrowania

W poniższych przykładach przedstawiono podstawowe funkcje rejestrowania i pokazano, jak używać interfejsu API biblioteki testów automatyzacji interfejsu użytkownika w podstawowej aplikacji sterownika automatyzacji testów.

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

        }
    }
}