UiRPA(アソシエイト資格試験)の模擬試験の答えと解説　No.11~No.22

前回の記事の続きになります。
前回の記事をまだご覧になられていない方は

https://qiita.com/y-matsunaga/items/946d6ee5f1bc91a2d2b3

をご覧になってから読んでいただければと思います。

それでは早速始めていきます。

### No11 セレクター編集時にワイルドカードとして使用できる記号はどれですか。

1. % と _
2.  と !
3. _ と *
4. ? と *

<details><summary>答えを見る</summary>

4.? と *


**セレクターとは**
ウェブページや、アプリケーションのユーザーインターフェイスは、アプリケーション自体のウィンドウを土台 (トップ ウィンドウ) として、その中に UI 要素 (ボタン・メニュー・サブメニュー等) の位置や、表示順などが定義されています

セレクターは、ユーザーインターフェイス内の特定のアクションを自動化するために、これらの UI 要素の属性を使用し、指定した要素までの「住所のようなもの」を自動生成したものです

**セレクターで使用するワイルドカード**
| * | ? |
|:-:|:-:|
|   文字数に制限なく置き換える。 |  1文字のみ置き換える。 |
|例：UiPath→Ui*th|例：UiPath→Ui??th|

公式ドキュメント：[セレクターについて](https://docs.uipath.com/studio/lang-ja/docs/about-selectors)

</details>

### No.12 UI 要素属性の全詳細はどこから表示できますか。

1. [出力 (Output)] パネルを使用する
2. [アウトライン (Outline)] パネルを使用する
3. UI Explorer ツールを使用する
4. [画面で選択 (Indicate on Screen)] ボタンを使用する

<details><summary>答えを見る</summary>

**3.UI Explorer ツールを使用する**

**Ui Explorerとは**
UI Explorer は、特定の UI 要素の構造を確認したり、独自のセレクターを作成できるツールです。
セレクターエディターよりも、高度な設定をすることができます。

選択肢を整理しましょう。

**1.[出力 (Output)] パネルを使用する**
出力パネルは下記の場合に使用しますので誤りです。
*[メッセージをログ] アクティビティと [1 行を書き込み] アクティビティの出力、プロジェクトの実行に関するステータス情報、アクティビティ パッケージによって生成されたエラーなどを表示します。*


**2. [アウトライン (Outline)] パネルを使用する**
アウトラインパネルは、フローの概略図を確認することができる機能ですので誤りです。

**3. UI Explorer ツールを使用する**
UI 要素を確認して、セレクターの設定を細かく変更したい場合には、UI Explorer を使用しますので正解です。

**4. [画面で選択 (Indicate on Screen)] ボタンを使用する**
ワークフローの実行中にユーザーが画面上の UI 要素またはリージョンを選択する機能なので誤りです。
公式ドキュメント：[Ui Explorer](https://docs.uipath.com/studio/lang-ja/docs/uipath-explorer)
公式ドキュメント：[ユーザーインターフェース](https://docs.uipath.com/studio/lang-ja/docs/the-user-interface)

</details>

### No.13 アクティビティにおけるセレクタープロパティ設定に使用できるデータタイプはどれですか。

1. UiPath.Core.Selector
2. System.Security.SecureString
3. System.String
4. System.Xml.XmlElement

<details><summary>答えを見る</summary>

**3.System.String**

公式のドキュメントや講座にはどこにも載っていないようですが、セレクターに使用する変数はString型である必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/08abaf48-30c2-5d27-e3b9-84ded8d0160c.png)

例えばこの画像でいうところの、**title**部分の値を変数での値でとってきたい場合はString型の変数を使用する必要があるということですね。

</details>

### No.14 部分セレクターと完全セレクターの違いは何ですか。

1. 部分セレクターは複数のウィンドウ間で切り替えながら作業をする場合に推奨される。
完全セレクターは最上位ウィンドウに関する情報を含まない。
2. 部分セレクターは最上位ウィンドウに関する情報を含まない。
完全セレクターは同じウィンドウ内で複数のアクションを実行する場合に推奨される。
3. 部分セレクターは同じウィンドウ内で複数のアクションを実行する場合に推奨される。
完全セレクターは最上位ウィンドウに関する情報を含む。
4. 部分セレクターは最上位ウィンドウに関する情報を含む。
完全セレクターは同じウィンドウ内で複数のアクションを実行する場合に推奨される。

<details><summary>答えを見る</summary>

**3.部分セレクターは同じウィンドウ内で複数のアクションを実行する場合に推奨される。
完全セレクターは最上位ウィンドウに関する情報を含む。**


**完全セレクターとは**
最上位ウィンドウ (アプリケーション) の要素を含み、UI 要素の特定に必要な全ての要素を含むセレクターです。

完全セレクターは、異なるウィンドウ・アプリケーションを同時 、または並行して操作する場合のセレクターに適しています。

完全セレクターは、[ベーシック (Basic)] レコーディングという機能を使用すると生成されます。

**部分セレクターとは**
最上位ウィンドウ (アプリケーション) の要素を含まず、[ウィンドウにアタッチ (Attach Window)]・[アプリケーションを開く (Open Application)] などのコンテナーのセレクターと合わせて機能するセレクターです。

同一のウィンドウ内で複数の操作を自動化する場合のセレクターに適しています。

部分セレクターは、[デスクトップ (Desktop)] レコーディングという機能を使用すると生成されます。

公式ドキュメント：[完全セレクターと部分セレクター](https://docs.uipath.com/studio/lang-ja/docs/full-versus-partial-selectors)

</details>

### No.15 UiPath Studio でアンカーとして使用できるアクティビティはどれですか。

1. [一致する画像を探す (Find Image)] または [要素を検出 (Find Element)]
2. [要素の消滅を待つ (Wait Element Vanish)] または [画像の消滅を待つ (Wait Image Vanish)]
3. [要素の存在を確認 (Element Exists)] または [画像の存在を確認 (Image Exists)]
4. [テキストを取得 (Get Text)] または [表示中のテキストを取得 (Get Visible Text)]

<details><summary>答えを見る</summary>

**1.[一致する画像を探す (Find Image)] または [要素を検出 (Find Element)]**

**アンカーとは**
アンカーとは、目的としたいUI要素を見つけるための「目印」のようなものです。
アンカーとして使用できるアクティビティは、[要素を探す (Find Element)] [画像を探す (Find Image)] の2つがあります。

</details>

### No.16 [アンカーベース (Anchor Base)] アクティビティが持つ機能はどれですか。

1. ページが完全に読み込まれ、すべての要素が自動化プロセスが開発された時と同じ位置にあることを確認する。
2. 安定したセレクターフィールドを頼りに、目的のフィールドに到達するまでタブ ホットキーを送り続ける。
3. 近くのアンカー要素を基準に指定されたセレクター要素が「True (真)」かを確認する。
4. 他の UI 要素をアンカーとして利用し、そのアンカー要素近くの領域を検索して UI 要素を特定する。

<details><summary>答えを見る</summary>

**4.他の UI 要素をアンカーとして利用し、そのアンカー要素近くの領域を検索して UI 要素を特定する。**

**アンカーベースとは**
アンカーベースとは、アンカーを目印に要素を特定し、特定した要素に対して行うアクションを指定するアクティビティです。

:::note info
ただし、アンカーベースはクラシックアクティビティ（＝旧機能）のため、今後は非推奨の機能となる可能性があります。モダンデザイン（＝新機能）では、要素選択でアンカーを選択できるようになりましたので、アンカーベースは不要となりました。

:::
モダンデザインについては、下記サイトが参考なりそうです。
私はレッスンと同じUIでないとなかなか進められなかったので、モダンデザインはまだ使いこなせていません。。。
後々挑戦したいと思っています！


[【UiPath】モダンデザイン（概要編） - Qiita](https://qiita.com/miya_gis/items/b0a25ef2621f10fbdbcc)

</details>

### No.17 Main.xaml から InitAllSettings.xaml を呼び出すにはどのアクテビティを使用しますか。

1. [アプリケーションを開く (Open Application)] アクテビティを使用する。
2. [ワークフローファイルを呼び出し (Invoke Workflow File)] アクテビティを使用する。
3. [コードを呼び出し (Invoke Code)] アクテビティを使用する。
4. [メソッドを呼び出し (Invoke Method)] アクテビティを使用する。

<details><summary>答えを見る</summary>

**2.[ワークフローファイルを呼び出し (Invoke Workflow File)] アクテビティを使用する。**

それぞれの選択肢を整理しましょう。

**1. [アプリケーションを開く (Open Application)]** 
指定したアプリケーションを起動し、その中で複数のアクションを実行するコンテナーです。必要に応じて、引数のリストをアプリケーションに渡すこともできます。

**2. [ワークフローファイルを呼び出し (Invoke Workflow File)]**
ワークフローファイル（拡張子『.xaml』）を呼び出すには、[ワークフローファイルを呼び出し (Invoke Workflow File)] アクテビティを使用します。
開発においては、機能毎に.xamlファイルを分けて作成したほうが、可読性やメンテナンス性が高くなります。

**3. [コードを呼び出し (Invoke Code)]**
VB.NET または C# コードを同期的に呼び出します。必要に応じて、コードに入力引数のリストを渡すこともできます。このアクティビティは、呼び出し側のワークフローに出力引数を返すこともできます。

**4. [メソッドを呼び出し (Invoke Method)]**
Invokes a Box API method.
元々備えているメソッドを呼び出すことができます。アクテビティになっていないメソッドを使用したい場合などに使用します。

公式ドキュメント：[ワークフローファイルを呼び出し(Invoke Workflow File)](https://docs.uipath.com/activities/lang-ja/docs/invoke-workflow-file)

</details>

### NO.18 フローチャートの主な機能は何ですか。

1. 1つのステートから別のステートに遷移するための条件を提供する。
2. 実行時にエラーが発生した場合のプロジェクトへの影響を制御する。
3. 1つのアクティビティから次のアクテビティにシームレスに移行する機能を持ち、直線的なプロセスに適した単一ブロック アクティビティとして機能する。
4. 複数の論理オペレータを分岐させることにより、複雑なビジネス プロセスの作成と複数アクティビティの接続を可能にする。

<details><summary>答えを見る</summary>

**4.複数の論理オペレータを分岐させることにより、複雑なビジネス プロセスの作成と複数アクティビティの接続を可能にする。**

UiPath でワークフローを構成する土台として、下記の3つの型が用意されています。

**フローチャート**
条件によって途中で分岐したり、前の処理に戻したりする、より複雑な処理を行うワークフロー。

**シーケンス**
複数のアクティビティを分岐することなく一直線に進む処理を行うワークフロー。

**ステートマシン**
ステート マシンはオートメーションの一種で、実行中に有限個のステートを使用します。ステート マシンは、アクティビティによって起動されたときに、あるステートに移行することができ、別のアクティビティが起動されたときにそのステートを終了します。
ステート マシンのもう 1 つの重要な特徴として、あるステートから別のステートに移行するための基準となる条件を追加することもできます。これらの条件はステート間で矢印またはブランチで表示されます。

選択肢を整理しましょう。
**1. 1つのステートから別のステートに遷移するための条件を提供する。**
ステートマシンの説明ですので誤りです。

**2. 実行時にエラーが発生した場合のプロジェクトへの影響を制御する。**
エラー処理の基本的な考え方の説明ですので誤りです。

**3. 1つのアクティビティから次のアクテビティにシームレスに移行する機能を持ち、直線的なプロセスに適した単一ブロック アクティビティとして機能する。**
シーケンスの説明ですので誤りです。

**4. 複数の論理オペレータを分岐させることにより、複雑なビジネス プロセスの作成と複数アクティビティの接続を可能にする。**
フローチャートの説明ですので正しいです。

公式ドキュメント：[シーケンス](https://docs.uipath.com/studio/lang-ja/docs/sequences)
公式ドキュメント：[フローチャート](https://docs.uipath.com/studio/lang-ja/docs/flowcharts)
公式ドキュメント：[ステートマシン](https://docs.uipath.com/studio/lang-ja/docs/state-machines)

</details>

### No.19 あるワークフローには反復処理を実行する前にカウンター値を評価する作業があります。フロー制御にはどのアクティビティを使用しますか。

1. [繰り返し (前判定)(While)]
2. [スイッチ (Switch)]
3. [条件分岐 (If)]
4. [繰り返し (後判定)(Do While)]

<details><summary>答えを見る</summary>

**1.[繰り返し (前判定)(While)]**

反復処理を行うワークフローは [繰り返し (前判定)(While)] と [繰り返し (後判定)(Do While)] の2つになります。
**処理を実行する「前」にカウンター値を評価する、とありますので、処理の前に判定を行う [繰り返し (前判定)(While)] を使用します。**

なお、繰り返しを行うワークフローには、[繰り返し (コレクションの各要素) (For Each)] と [繰り返し (各行) (For Each Row)] というものもあります。

**[繰り返し (コレクションの各要素) (For Each)]** 

リストや配列など、コレクションで指定したデータの型の各要素に対して、1 つずつ [本体 (Body)] 内に格納されている処理を、繰り返し行うことができます

**[繰り返し (各行) (For Each Row)]**

Data Table 型データの各行に対して、Body 内に格納されている処理を、繰り返し行うことができます

これらは、Visual Basic 等に実装されている ForEach 文と同じものです。

</details>

### No.20 プロセスは次の要件を満たしている必要があります。

1. アプリケーション内で支払い状況フィールドの値を確認する。
2. 支払い状況フィールドの有効な値には、「保留」、「支払い済み」、「承認待ち」の3通りがある。
3. 「保留」に関しては「締め切り日」フィールドを確認し、締め切り日が過ぎた場合に警告する。それ以外は何もしない。
4. 「支払い済み」はステータスを完了に変更する。
5. 「承認待ち」に関してはアカウント オーナー フィールドに指定されたメールアドレスに警告メールを送信する。

**UiPath ベストプラクティスによると、ステップ2の実装に使用することが推奨されるアクティビティはどれですか。**

1. [ステータスを報告 (Report Status)]
2. [スイッチ (Switch)]
3. [トランザクションのステータスを設定 (Set Transaction Status)]
4. [条件分岐 (If)]

<details><summary>答えを見る</summary>

**2. [スイッチ (Switch)]**

問題文には、支払い状況フィールドの値によって、その後の処理を変化させる旨の記述があります。行程2 を見ると、その分岐が3パターンになることが分かります。

分岐が2パターンであれば、[条件分岐 (If)] を使用すればよいと思いますが、分岐が3パターン以上になると、[条件分岐 (If)]をネスト（入れ子にすること）しなければならず、途端に読みずらいワークフローになってしまいます。

そこで、分岐が3パターン以上になる場合には、[スイッチ (Switch)] を使用します。

**[スイッチ (Switch)] アクテビティとは**
事前設定された条件に基づいて、複数のオプションから 1 つのアクション コースを実行できます。

アクティビティは、条件式とケースのコレクションで構成され、それぞれに対応するアクティビティまたはアクティビティのセットが含まれます。

Switch アクティビティは、条件式との一致に基づいて、コレクション内の 1 つのケースを実行します。条件がいずれのケースにも一致しない場合は、デフォルトの条件が実行されます。

条件を 3 つ以上のケースに対してテストする必要がある場合は、If アクティビティの代わりに Switch アクティビティを使用できます。

**[ステータスを報告 (Report Status)]**

実行中のプロセスのカスタム ステータスを UiPath Assistant に表示します。

公式ドキュメント：[ステータスを報告](https://docs.uipath.com/activities/lang-ja/docs/report-status)

**[トランザクションのステータスを設定 (Set Transaction Status)]**
Orchestrator のトランザクション アイテムのステータスを [失敗] または [成功] に設定します。
公式ドキュメント：[トランザクションのステータスを設定 (Set Transaction Status)](https://docs.uipath.com/activities/lang-ja/docs/set-transaction-status)

公式ドキュメント：[ワークフローのデザイン](https://docs.uipath.com/studio/lang-ja/docs/workflow-design)

</details>

### No.21 次の画像を参照して回答してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/4abf534e-bdf5-8d5f-cddc-b8594e36f91b.png)
**画像に示されたワークフローの出力結果はどれですか。**

1. Current Item: Test
2. IndexOutOfRangeException
3. NullReferenceException
4. Current Item: null

<details><summary>答えを見る</summary>

**2. IndexOutOfRangeException**

**トライ キャッチ (Try Catch)とは**

シーケンスまたはアクティビティ内で指定した例外の種類をキャッチし、エラー通知を表示するか、例外を無視して実行を続けます。

変数パネルを見ると、String型の str_Item という変数が設定され、
また、String配列型の str_Items という変数が設定され、初期値が "Test" とされています。

そして、ワークフローでは、str_Item に str_Items を代入する文章が書かれていますが、String型の変数に、配列型の変数を代入することはできません。

そのため、「無効なインデックスを使用して、配列にアクセスしましたよ＝IndexOutOfRangeException」というエラーが発生します。

トライキャッチアクティビティにて、IndexOutOfRangeException があった場合には、"IndexOutOfRangeException" という文字が書き込まれるようになっていますので、出力結果は、"IndexOutOfRangeException" となります。

</details>

### No.22 ベストプラクティスによると、1つの自動化プロジェクトにはいくつの [グローバル例外ハンドラー (Global Exception Handler)] を設定できますか。

1. プロジェクト内の各アクテビティに1つ
2. プロジェクトに設定できるグローバル例外ハンドラーの数には制限はない
3. 1つのプロジェクトに1つ
4. プロジェクト内の各ワークフローに1つ

<details><summary>答えを見る</summary>

**3.1つのプロジェクトに1つ**

**グローバル例外ハンドラー とは**

グローバル例外ハンドラーは、実行エラーが発生した場合にプロジェクトの動作を決定するよう設計されたワークフローの一種です。オートメーション プロジェクト 1 件につき、グローバル例外ハンドラー を 1 つだけ追加できます。

グローバル例外ハンドラーは例外を検出すると、失敗したアクティビティの名前をログし、そのアクティビティを 3 回リトライします。実行のたびに同じ例外が発生し、リトライ回数が 3 回に達した場合、例外をスローしたアクティビティのレベルで実行を中止します。

試行中に 1 回でも例外が発生しなかった場合には、ワークフローの実行が継続され、グローバル例外ハンドラーは介入しません。

公式ドキュメント：[グローバル例外ハンドラー](https://docs.uipath.com/studio/lang-ja/docs/global-exception-handler)

</details>

### まとめ

今回の１２問は下記の試験範囲のうち
「セレクター」 「制御フロー」 となります。

RPA の基礎
UiPath Studio の概要
変数と引数
**セレクター**
**制御フロー**
データ操作
UiPath の自動化概念とあらゆるテクニック
UiPath Orchestrator の概要

:::note warn
注意
この模擬試験は答えられて終わるのではなく、しっかりと説明できるようになることが重要です。
:::

最後に今回の記事作成に参考にさせていただいたサイトを共有します。

https://streamlineoperations.hatenablog.com/

最後まで見ていただいてありがとうございました。

続きはこちらからどうぞ！

https://qiita.com/y-matsunaga/items/2f387f8567852506c47d

https://qiita.com/y-matsunaga/items/69937a7d9d14965eeccd

https://qiita.com/y-matsunaga/items/69937a7d9d14965eeccd

https://qiita.com/y-matsunaga/items/8abbb8ececca4ef69bce