Windows アプリの AI 支援テスト

winapp uiコマンドとwinui-ui-testingスキルを使用すると、AI エージェントはアプリの UI を自動的に検査、操作、検証できます。これは、テスト ハーネス コードを最初に記述せずに反復処理できるように、自然言語で表示される内容を記述します。

UI 検査コマンド

winui-ui-testing スキルは、winui@awesome-copilot プラグインに含まれています。 セットアップ中にプラグインをインストールした場合、追加のインストールは必要ありません。

Command それが何をするか
winapp ui inspect 実行中のアプリのアクセシビリティ ツリーをダンプします
winapp ui screenshot アプリ ウィンドウのスクリーンショットをキャプチャします
winapp ui click <selector> ボタンをクリックするか、項目を選択します。
winapp ui invoke <selector> コントロールに対して既定のアクションを呼び出します。
winapp ui search <text> 要素ツリーを名前または AutomationId で検索します
winapp ui set-value <selector> <value> TextBox または ComboBox の値を設定します。

エージェントにアプリのテストを依頼する

  1. アプリを実行します:
    dotnet run
    
  2. 次のような自然言語の質問をエージェントに問い合わせてください。

    "実行中のアプリを見て、フォームが空のときに [保存] ボタンに到達できるかどうかを確認してください。"

  3. エージェントは、 winapp ui inspectwinapp ui screenshot を使用してアプリを調べて応答します。

このワークフローでは、1 行のテスト コードを記述する前に、キーボード フォーカスの不足、無効なコントロール、レイアウトの問題などの問題をキャッチできます。

自動テストを記述する

対話形式でアプリを探索したら、正式なテストを生成するようにエージェントに依頼します。 このスターター プロンプトを使用します。

Write an xUnit UI test for my WinUI 3 app that:
1. Launches the app with dotnet run
2. Verifies the main window title is "My App"
3. Clicks the button with AutomationId "SaveButton"
4. Verifies a success message appears
Use the winapp ui commands for element interaction.

生成されたテストでは、対話レイヤーとして winapp ui コマンドが使用されるため、別の UI オートメーション フレームワークなしで実行されます。

XAML で AutomationId を設定する

winapp ui click が要素を確実に対象にできるようにするには、XAML で AutomationProperties.AutomationId を設定します。

<Button AutomationProperties.AutomationId="SaveButton"
        Content="Save" />
<TextBox AutomationProperties.AutomationId="TitleInput" />

エージェントに「この XAML のすべての対話型コントロールに AutomationId 属性を追加する」と尋ねます。

CI でテストを実行する

GitHub Actions ワークフローでwinapp uiコマンドを実行できます。 テストにはグラフィカル セッションが必要です。runs-on: windows-latestでWindows ランナーを使用します。

name: UI tests
on: [push, pull_request]
jobs:
  ui-test:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '9.0.x'
      - name: Install winapp CLI
        run: winget install --id Microsoft.WinAppCLI --silent --accept-package-agreements --accept-source-agreements --disable-interactivity
      - name: Build
        run: dotnet build
      - name: Run UI tests
        run: dotnet test --filter Category=UITest

Note

winapp ui コマンドは、実行中のプロセスのライブ アクセシビリティ ツリーと対話します。 テストでは、テストのセットアップの一環として(または TestInitialize ステップで)アプリを起動し、テアダウンで閉じる必要があります。

アクセシビリティを自動的に確認する

winapp ui inspect コマンドは、完全なアクセシビリティ ツリー (要素名、型、状態、AutomationId) を出力します。 アクセシビリティのギャップを確認するようにエージェントに依頼します。

Run "winapp ui inspect" on the running app and identify any issues:
- Controls without accessible names
- Missing keyboard focus order
- Buttons or links that aren't reachable by Tab
Report findings as a prioritized list, most critical first.

このプロンプトは、正式な監査ツールを実行する前の最初のアクセシビリティ レビューと同様に機能します。 完全なアクセシビリティ チェックリストについては、「Windows アプリのアクセシビリティの概要」を参照してください。