Библиотека тестов модель автоматизации пользовательского интерфейса

Библиотека тестов модель автоматизации пользовательского интерфейса (библиотека тестов UIA) — это API, который вызывается приложением драйвера в сценарии автоматического тестирования. Драйвер — это приложение, которое получает элемент автоматизации (объект IUIAutomationElement) из элемента управления, требующего проверки, и предоставляет его библиотеке тестирования модель автоматизации пользовательского интерфейса. Затем библиотека тестов проверяет и проверяет реализацию модель автоматизации пользовательского интерфейса. Дополнительные сведения об элементах модель автоматизации пользовательского интерфейса и автоматизации см. в разделе Модель автоматизации пользовательского интерфейса Fundamentals.

Рабочий процесс библиотеки тестов модель автоматизации пользовательского интерфейса

На следующей схеме показан рабочий процесс тестирования, включающий библиотеку тестирования модель автоматизации пользовательского интерфейса, используя консольное приложение в качестве драйвера. В этом случае драйвер запускает экземпляр Notepad.exe и получает элемент автоматизации (то есть объект IUIAutomationElement ) из элемента управления редактирования. Затем драйвер создает объект библиотеки тестов модель автоматизации пользовательского интерфейса на основе тестируемой платформы пользовательского интерфейса, а затем передает элемент автоматизации в качестве параметра. Библиотека тестов модель автоматизации пользовательского интерфейса определяет, что элемент автоматизации является типом элемента управления "Документ", а затем выполняет тесты элементов управления "Документ", "Текст" и "Прокрутка" и универсальные тесты элементов автоматизации.

Схема: поток из драйвера в приложение в UIATestLibrary с помощью красных стрелок.

Ведение журнала с помощью библиотеки тестов модель автоматизации пользовательского интерфейса

Библиотека тестов модель автоматизации пользовательского интерфейса использует внешние библиотеки 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);

        }
    }
}