# 画面設計書 92-Automation

## 概要

本ドキュメントは、IntegrationTestAppアプリケーションにおけるAutomationPageの画面設計書です。UIオートメーション（アクセシビリティ）機能のテストを目的としたページとして設計されています。

### 本画面の処理概要

**業務上の目的・背景**：本画面は、Avaloniaフレームワークにおけるアクセシビリティ機能およびUIオートメーション機能の統合テストを目的としています。スクリーンリーダーなどの支援技術との連携、オートメーションプロパティの設定、ライブリージョン機能など、アクセシビリティに関連する機能が正しく動作することを検証するためのテストUIを提供します。WCAG（Web Content Accessibility Guidelines）やプラットフォーム固有のアクセシビリティAPIとの互換性を確保するために重要なテスト機能です。

**画面へのアクセス方法**：IntegrationTestAppのメインウィンドウ左側のListBoxナビゲーションから「Automation」項目を選択することでアクセスします。

**主要な操作・処理内容**：
1. AutomationIdの設定と動作確認（Name属性とAutomationIdの違いの検証）
2. LabeledByプロパティによるラベルとコントロールの関連付け確認
3. ControlTypeOverrideによるコントロールタイプの上書き確認
4. HeadingLevelプロパティによる見出しレベルの設定確認
5. LiveSettingプロパティによるライブリージョン機能のテスト
6. ボタン押下によるライブリージョンへのテキスト追加

**画面遷移**：この画面はIntegrationTestAppのメインウィンドウ内のページとして表示されます。他画面への遷移機能はありません。

**権限による表示制御**：特になし。すべてのユーザーが全機能を利用可能です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 95 | Win32Automation | 主機能 | オートメーションのテスト。UIオートメーション対応、アクセシビリティプロパティの検証 |

## 画面種別

テスト・検証画面

## URL/ルーティング

デスクトップアプリケーションのため、URLルーティングはなし。MainWindowのListBoxナビゲーションから「Automation」を選択。

## 入出力項目

| 項目名 | 入出力 | 型 | 必須 | 説明 |
|--------|--------|-----|------|------|
| Add some live region text ボタン | 入力 | Button | - | ライブリージョンにテキストを追加するトリガー |

## 表示項目

| 項目名 | コントロール名 | 説明 |
|--------|--------------|------|
| TextBlockWithName | TextBlock | Name属性でアクセス可能なテキストブロック |
| TextBlockWithNameAndAutomationId | TextBlock | Name属性とAutomationIdの両方を持つテキストブロック（AutomationIdが優先） |
| TextBlockAsLabel | TextBlock | TextBoxのラベルとして使用されるテキストブロック |
| LabeledByTextBox | TextBox | LabeledByでラベルと関連付けられたテキストボックス |
| TextBlockWithHeader1 | TextBlock | ヘッダーレベル1として設定されたテキストブロック |
| TextBlockWithHeader2 | TextBlock | ヘッダーレベル2として設定されたテキストブロック |
| TextBlockWithoutHeader | TextBlock | ヘッダーレベルなしのテキストブロック |
| textLiveRegion | TextBlock | Assertiveライブリージョンとして設定されたテキストブロック |

## イベント仕様

### 1-OnButtonAddSomeText

**トリガー**: 「Add some live region text」ボタン押下

**処理内容**:
1. textLiveRegionのTextプロパティに" Lorem ipsum."を追加
2. LiveSetting=Assertiveにより、支援技術に即座に通知される

## データベース更新仕様

### 操作別データベース影響一覧

本画面はUIコントロールのテスト用であり、データベース操作は行いません。

## メッセージ仕様

本画面ではシステムメッセージの表示はありません。

## 例外処理

本画面では例外処理は定義されていません。

## 備考

- AutomationProperties.AutomationIdはName属性とは別に設定でき、オートメーションツールはAutomationIdを優先して使用します
- LabeledByプロパティはアクセシビリティのために、ラベルテキストとコントロールを関連付けます
- ControlTypeOverride="Header"によりコントロールタイプを見出しとして認識させることができます
- HeadingLevelは1-9のレベル指定が可能で、スクリーンリーダーでの見出しナビゲーションに使用されます
- LiveSetting=Assertiveは画面変更を即座に通知する設定で、重要な更新に使用します

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

まず、オートメーションプロパティの構造を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | AutomationProperties.cs | `src/Avalonia.Controls/Automation/AutomationProperties.cs` | AutomationId、LabeledBy、ControlTypeOverride、HeadingLevel、LiveSettingの添付プロパティ定義 |

**読解のコツ**: AutomationPropertiesは添付プロパティ（Attached Property）として定義されており、任意のコントロールに設定可能です。

#### Step 2: エントリーポイントを理解する

処理の起点となるページファイルを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | AutomationPage.axaml | `samples/IntegrationTestApp/Pages/AutomationPage.axaml` | UI構造とAutomationPropertiesの使用例 |
| 2-2 | AutomationPage.axaml.cs | `samples/IntegrationTestApp/Pages/AutomationPage.axaml.cs` | OnButtonAddSomeTextイベントハンドラ |

**主要処理フロー**:
1. **行8**: Name属性のみを持つTextBlock定義
2. **行9-11**: AutomationIdとName属性の両方を持つTextBlock（AutomationId="TextBlockWithNameAndAutomationId"）
3. **行13-15**: LabeledByバインディングでラベルとTextBoxを関連付け
4. **行16-24**: HeadingLevelの設定例（Level 1, 2, なし）
5. **行26-27**: ボタンとライブリージョンの定義

#### Step 3: イベント処理を理解する

ライブリージョンへのテキスト追加処理を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | AutomationPage.axaml.cs | `samples/IntegrationTestApp/Pages/AutomationPage.axaml.cs` | OnButtonAddSomeTextメソッドの実装 |

**主要処理フロー**:
- **行13-16**: textLiveRegion.Textに文字列を追加

### プログラム呼び出し階層図

```
AutomationPage
    │
    └─ OnButtonAddSomeText
           └─ textLiveRegion.Text += " Lorem ipsum."
                  │
                  └─ LiveSetting=Assertive により
                     支援技術への通知がトリガーされる
```

### データフロー図

```
[入力]                    [処理]                      [出力]

ボタン押下     ───▶  OnButtonAddSomeText()  ───▶  textLiveRegion.Text更新
                          │
                          └─ 文字列連結              ───▶  支援技術への通知
                             " Lorem ipsum."              (LiveSetting=Assertive)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| AutomationPage.axaml | `samples/IntegrationTestApp/Pages/AutomationPage.axaml` | ソース | ページのUI定義、AutomationPropertiesの使用例 |
| AutomationPage.axaml.cs | `samples/IntegrationTestApp/Pages/AutomationPage.axaml.cs` | ソース | ページのコードビハインド |
| MainWindow.axaml | `samples/IntegrationTestApp/MainWindow.axaml` | ソース | メインウィンドウとナビゲーション |
| MainWindow.axaml.cs | `samples/IntegrationTestApp/MainWindow.axaml.cs` | ソース | ページ生成ファクトリ（行79） |
