Bahasa

Uji aplikasi desktop Windows dengan MSTest UI Automation

Paket pratinjau MSTest.Windows.UIAutomation mengintegrasikan manajemen siklus hidup MSTest dengan API Windows UI Automation bawaan. Gunakan ini untuk meluncurkan aplikasi desktop tepercaya penuh yang belum dikemas, menemukan salah satu jendelanya dalam bentuk AutomationElement, dan menghentikan aplikasi setelah setiap tes.

Paket ini mendukung aplikasi Win32, Formulir Windows, dan WPF dalam sesi Windows interaktif. Ini tidak menyediakan Aktivasi MSIX, UWP, atau WinUI, otomatisasi proses yang ditinggikan, desktop tanpa kepala, pencari lokasi, penantian otomatis, cuplikan layar, atau model objek multi-jendela.

Important

Fitur ini memerlukan paket pratinjau MSTest 4.5 dan kerangka kerja target khusus Windows.

Aktifkan Windows UI Automation

Dengan MSTest.Sdk, atur EnableWindowsUIAutomation ke true:

<Project Sdk="MSTest.Sdk/4.5.0">
  <PropertyGroup>
    <TargetFramework>net8.0-windows</TargetFramework>
    <EnableWindowsUIAutomation>true</EnableWindowsUIAutomation>
  </PropertyGroup>
</Project>

MSTest.Sdk menambahkan paket MSTest.Windows.UIAutomation yang sesuai. Tanpa MSTest.Sdk, gunakan referensi ke MSTest.Windows.UIAutomation, MSTest.TestFramework, dan MSTest.TestAdapter pada versi MSTest yang sesuai. Cantumkan versi Microsoft.NET.Test.Sdk yang kompatibel secara terpisah karena versi tersebut mengikuti baris versi VSTest.

Untuk proyek yang ditargetkan Windows yang memulihkan atau membangun di Linux atau macOS, atur EnableWindowsTargeting ke true.

Pilih kelas dasar

Berasal dari salah satu kelas ini:

  • ApplicationTest memulai aplikasi sebelum setiap pengujian dan menghentikannya selama pembuangan. Ambil alih CreateProcessStartInfo untuk mengidentifikasi executable.
  • WindowTest juga menunggu jendela dan menampilkannya melalui MainWindow.

Deklarasikan STATestClass langsung pada setiap kelas pengujian konkret karena atribut kelas pengujian MSTest tidak diwariskan:

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

Gunakan MainWindow dalam metode pengujian Anda untuk mengkueri atau memanggil pola Windows UI Automation. Paket ini menggunakan API UIA2 System.Windows.Automation . Anda dapat menambahkan pustaka lain, seperti FlaUI, di atas AutomationElement yang diekspos saat Anda memerlukan interaksi elemen yang lebih lengkap.

Sesuaikan startup dan pendeteksian jendela

Timpa anggota ini jika nilai bawaannya tidak cocok untuk aplikasi Anda:

  • ApplicationShutdownTimeout mengontrol berapa lama kelas dasar menunggu pematian anggun dan penghentian paksa. Defaultnya adalah lima detik.
  • WindowDiscoveryTimeout mengontrol berapa lama WindowTest menunggu jendela. Defaultnya adalah 10 detik.
  • FindWindow memilih jendela untuk aplikasi yang menggunakan proses peluncur, menampilkan layar splash, atau membuat beberapa jendela tingkat atas.
  • StopApplication mematikan aplikasi ketika jendela yang dipilih termasuk dalam proses selain proses yang CreateProcessStartInfo diluncurkan.

Kelas dasar mengamati TestContext.CancellationToken selama startup dan penemuan jendela. WindowTest gagal ketika aplikasi keluar sebelum jendela muncul atau ketika penemuan mencapai batas waktunya.

Memahami perilaku siklus hidup

ApplicationTest memulai satu proses aplikasi untuk setiap pemanggilan pengujian. WindowTest menemukan jendela setelah proses dimulai. Setelah pengujian dan metode pembersihannya selesai, MSTest membuang kelas dasar, meminta penutupan yang anggun melalui jendela utama, dan mengakhiri pohon proses jika aplikasi tidak keluar dalam batas waktu yang dikonfigurasi.

Untuk pengujian dan percobaan ulang berparameter, setiap pemanggilan menerima siklus hidup aplikasinya sendiri.

Baca juga