Поделиться через


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

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

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

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

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

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

Библиотека тестов автоматизации пользовательского интерфейса использует внешние библиотеки DLL для журналов результатов тестового выполнения. Он поддерживает ведение журнала как XML и ведение журнала в консоли.

Ведение журнала XML

Ведение журнала XML обычно используется проверкой автоматизации пользовательского интерфейса Visual UI, но оно также может быть включено в рабочий процесс командной строки.

Если задано ведение журнала 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);

        }
    }
}