언어

MSTest UI 자동화 사용하여 Windows 데스크톱 앱 테스트

미리 보기 MSTest.Windows.UIAutomation 패키지는 MSTest 수명 주기 관리를 기본 제공 Windows UI 자동화 API와 통합합니다. 이를 사용하여 패키지되지 않은 완전 신뢰 데스크톱 애플리케이션을 시작하고, 창 AutomationElement중 하나를 찾은 다음, 각 테스트 후에 애플리케이션을 중지합니다.

패키지는 대화형 Windows 세션에서 Win32, Windows Forms 및 WPF 애플리케이션을 지원합니다. MSIX, UWP 또는 WinUI 앱 활성화 기능, 관리자 권한 프로세스 자동화, 헤드리스 데스크톱, 로케이터, 자동 대기 기능, 스크린샷 또는 다중 창 객체 모델을 제공하지 않습니다.

Important

이 기능을 사용하려면 MSTest 4.5 미리 보기 패키지와 Windows 특정 대상 프레임워크가 필요합니다.

Windows UI 자동화 활성화

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 버전 줄을 따르므로 별도로 참조합니다.

Linux 또는 macOS에서 복원하거나 빌드하는 Windows를 대상으로 하는 프로젝트의 경우 true를 EnableWindowsTargeting(으)로 설정합니다.

기본 클래스 선택

다음 클래스 중 하나에서 파생됩니다.

  • ApplicationTest 는 각 테스트 전에 애플리케이션을 시작하고 삭제하는 동안 중지합니다. 실행 파일을 식별하려면 CreateProcessStartInfo를 재정의합니다.
  • WindowTest은 창이 나타나기를 기다리고 이를 MainWindow을 통해 제공합니다.

MSTest 테스트 클래스 특성은 상속되지 않으므로 모든 구체적인 테스트 클래스에서 직접 선언 STATestClass 합니다.

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

테스트 메서드에서 Windows UI 자동화 패턴을 쿼리하거나 호출하는 데 사용합니다MainWindow. 패키지는 UIA2 System.Windows.Automation API를 사용합니다. 더 풍부한 요소 상호 작용이 필요할 때 노출되는 AutomationElement 라이브러리 위에 FlaUI와 같은 다른 라이브러리를 계층화할 수 있습니다.

시작 및 창 검색 사용자 지정

기본값이 애플리케이션에 맞지 않는 경우 이러한 멤버를 재정의합니다.

  • ApplicationShutdownTimeout 는 기본 클래스가 정상 종료 및 강제 종료를 기다리는 시간을 제어합니다. 기본값은 5초입니다.
  • WindowDiscoveryTimeout는 WindowTest가 창을 기다리는 시간을 제어합니다. 기본값은 10초입니다.
  • FindWindow 시작 관리자 프로세스를 사용하거나 시작 화면을 표시하거나 여러 최상위 창을 만드는 애플리케이션의 창을 선택합니다.
  • StopApplication 는 선택한 창이 시작된 프로세스 CreateProcessStartInfo 이외의 프로세스에 속할 때 애플리케이션을 종료합니다.

기본 클래스는 시작 및 창 검색 중에 TestContext.CancellationToken를 관찰합니다. WindowTest 는 창이 나타나기 전에 애플리케이션이 종료되거나 검색이 시간 제한에 도달하면 실패합니다.

수명 주기 동작 이해

ApplicationTest 는 각 테스트 호출에 대해 하나의 애플리케이션 프로세스를 시작합니다. WindowTest 는 프로세스가 시작된 후 창을 검색합니다. 테스트 및 정리 메서드가 완료되면 MSTest는 기본 클래스를 삭제하고, 주 창을 통해 정상 닫기를 요청하며, 애플리케이션이 구성된 시간 제한 내에 종료되지 않으면 프로세스 트리를 종료합니다.

매개 변수가 있는 테스트 및 재시도의 경우 각 호출은 자체 애플리케이션 수명 주기를 받습니다.

참고하십시오