Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предварительный пакет MSTest.Windows.UIAutomation интегрирует управление жизненным циклом MSTest со встроенным API автоматизации пользовательского интерфейса Windows. Используйте его, чтобы запускать неупакованное классическое приложение для рабочего стола с полным доверием, находить одно из его окон как AutomationElement и останавливать приложение после каждого теста.
Пакет поддерживает приложения Win32, Windows Forms и WPF в интерактивном сеансе Windows. Не предоставляет активацию MSIX, UWP или WinUI, автоматизацию процессов с повышенными привилегиями, виртуальный рабочий стол без графического интерфейса, локаторы, автоматические ожидания, скриншоты или объектную модель с несколькими окнами.
Important
Для этой функции требуются пакеты предварительной версии MSTest 4.5 и целевая платформа для Windows.
Включить автоматизацию пользовательского интерфейса Windows
С MSTest.Sdk установите true в значение EnableWindowsUIAutomation:
<Project Sdk="MSTest.Sdk/4.5.0">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<EnableWindowsUIAutomation>true</EnableWindowsUIAutomation>
</PropertyGroup>
</Project>
MSTest.Sdk добавляет соответствующий MSTest.Windows.UIAutomation пакет. Если не используется MSTest.Sdk, добавьте ссылки на MSTest.Windows.UIAutomation, MSTest.TestFramework и MSTest.TestAdapter соответствующих версий MSTest. Укажите совместимую версию Microsoft.NET.Test.Sdk отдельно, так как она соответствует линейке версий VSTest.
Для проекта, предназначенного для Windows, который восстанавливает зависимости или собирается в Linux или macOS, задайте для EnableWindowsTargeting значение true.
Выбор базового класса
Производный от одного из этих классов:
-
ApplicationTestзапускает приложение перед каждым тестом и останавливает его во время удаления. ПереопределитеCreateProcessStartInfo, чтобы определить исполняемый файл. -
WindowTestтакже ожидает появления окна и делает его доступным черезMainWindow.
Объявите STATestClass непосредственно на каждом конкретном тестовом классе, так как атрибуты тестового класса MSTest не наследуются:
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Windows.UIAutomation;
[STATestClass]
public sealed class MyAppTests : WindowTest
{
protected override ProcessStartInfo CreateProcessStartInfo()
=> new(@"C:\MyApp\MyApp.exe");
}
Imports System.Diagnostics
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports Microsoft.VisualStudio.TestTools.UnitTesting.Windows.UIAutomation
<STATestClass>
Public NotInheritable Class MyAppTests
Inherits WindowTest
Protected Overrides Function CreateProcessStartInfo() As ProcessStartInfo
Return New ProcessStartInfo("C:\MyApp\MyApp.exe")
End Function
End Class
Используйте MainWindow в методах тестирования для запроса или вызова шаблонов Windows модель автоматизации пользовательского интерфейса. Пакет использует API UIA2 System.Windows.Automation . Вы можете использовать другую библиотеку, например FlaUI, поверх предоставленного AutomationElement, когда требуются более широкие возможности взаимодействия с элементами.
Настроить запуск и обнаружение окон
Переопределите эти элементы, если значения по умолчанию не соответствуют приложению:
-
ApplicationShutdownTimeoutопределяет, сколько времени базовый класс ожидает корректного завершения работы и принудительного завершения. Значение по умолчанию — пять секунд. -
WindowDiscoveryTimeoutопределяет времяWindowTestожидания окна. Значение по умолчанию — 10 секунд. -
FindWindowВыбирает окно для приложений, использующих процесс запуска, отображение экрана-заставки или создание нескольких окон верхнего уровня. -
StopApplicationзавершает работу приложения, когда выбранное окно принадлежит процессу, отличному от запущенного процессаCreateProcessStartInfo.
Базовые классы отслеживают TestContext.CancellationToken во время запуска и обнаружения окна.
WindowTest вызывает сбой, если приложение закрывается до появления окна или если истекает время ожидания обнаружения.
Изучение поведения жизненного цикла
ApplicationTest запускает один процесс приложения для каждого тестового вызова.
WindowTest обнаруживает окно после запуска процесса. После завершения теста и его методов очистки MSTest удаляет базовый класс, запрашивает корректное закрытие через главное окно и завершает дерево процессов, если приложение не выходит в течение настроенного времени ожидания.
Для параметризованных тестов и повторных попыток каждый вызов получает собственный жизненный цикл приложения.