Try-Catch ステップ
このステップでは、アクションを実行し、そのアクションによって発生することがある 1 つ以上の例外をキャッチします。このステップは、3 つの部分に分割された多くの分岐から構成されています。
- Try 分岐:実行するアクションを指定する最上部分。
- Catch 分岐:Try 分岐のアクションの実行時にスローされる可能性がある 1 つ以上の例外と、それが発生した場合に実行するアクションを指定します。複数の Catch 分岐を設定することができ、それぞれの Catch 分岐は同じ方法で処理される任意の数の例外をリストできます。
- Finally 分岐:実行するアクションを指定します。この分岐は、Try と Catch の実行結果に関係なく、常に最後に実行されます。
例外は、Throw ステップによって明示的にスローされるか、その他のステップで実行中にエラーが発生するためスローされます。スローされた例外は、事前定義の例外と呼ばれます。
![ワークフローの Try-Catch ステップ](../../All_Images/try.png)
プロパティ
- 名前
- ステップの名前が含まれます。
- トライ
- 実行するアクションを指定します。アクションの結果として例外が予想される場合、 Catch ブロックで例外を指定します。
- 例外
- キャッチすることが予想される 1 つ以上の例外を指定します。
Catch 分岐はそれぞれ例外のリスト、およびその右側にある、Try 分岐の実行でこれらのいずれかの例外がスローされた場合に実行するアクションで構成されます。
各例外には、Throw ステップで使用される例外名、または事前定義された例外名に対応する名前が付けられます。
Catch 分岐で例外が追加または編集されると、エディタでは Try 分岐内でスローされる可能性があり、かつ Catch 分岐にまだリストされていない例外が提案されます。
- Finally
- Try-Catch ステップを終了する直前に実行するアクションを指定します。
実行
Try-Catch ステップの実行は、その他のステップよりも少し複雑です。最も一般的な実行ケースは最もシンプルで、最初に説明します。最も複雑なケースは Finally 分岐にステップが含まれている (空ではない) 場合です。
すべてのケースで、Try-Catch ステップの実行は、Try 分岐を実行することから始まります。これは正常に終了するか、いずれかのステップによってスローされる例外によって終了できます。
- 最も一般的なケース:Finally 分岐が空
-
- Try 分岐が正常に終了
- 実行は、Try-Catch ステップ全体の後のステップで続行されます。つまり、Catch 分岐はこの場合は実行されません。
- Try 分岐がスローされた例外で終了
- 例外をスローするステップから、実行は例外をリストする Catch 分岐の開始を直接続行します。
- より複雑なケース:Finally 分岐が空
-
- Try 分岐がスローされた例外で終了するが、Catch 分岐はその例外をリストしない
- このケースは、Try-Catch ステップ自体が例外をスローしたように扱われ、その他のステップが例外をスローした場合と同じ方法で処理されます。ここにリストされているすべてのケースが適用されます。注 この戦略 (「Try-Catch ステップ自体が例外をスローしたように扱われる」) は、その他多くのケースで使用されます。
すべての Try-Catch ステップに空の Finally 分岐がある場合、ワークフロー ロジックで周囲の Try-Catch ステップの一致する Catch 分岐が検索され、どの Try 分岐にこの Try-Catch ステップが含まれているかが検索されます。そのような Catch 分岐が周囲の Try-Catch ステップに見つからない場合、例外はワークフロー内で "not handled" に設定されます。そのような場合、ワークフローおよび含まれている Desktop Automation ステップの実行が停止し、エラーはDesktop Automationステップの [[エラー処理]] タブで指定されているように処理されます。
Try-Catch ステップに Finally 分岐も含まれている場合、実行は同様ですが、1 度に 1 つの "throw" が実行されます。
- Try 分岐がスローされた例外で終了し、当該の Catch 分岐もスローされた例外で終了する
- Catch 分岐でスローされた例外は同じ Try-Catch ステップの Catch 分岐では処理されません。代わりに、これは Try-Catch ステップ自体がその例外をスローしたように扱われます。詳細については、前のケースの説明を参照してください。
- ネストされた Try-Catch ステップに関する注意
- Try-Catch ステップによって処理される例外は、周囲の Try-Catch ステップによって処理されません。例外を処理できる Catch 分岐が見つかると、例外は完全に処理されたものとみなされ、"forgotten" になります。Catch 分岐の実行が開始し、通常の方法で続行します。そのため、各例外は一度だけ処理されます。
- 最も複雑なケース:Finally 分岐が空ではない
- この場合、実行の状態に関係なく、Finally 分岐のステップは実行が Try-Catch ステップで終了する直前に実行されます。次のケースで、これがどのように動作するかを上記のケースごとに詳述します。
- Try 分岐が正常に終了
- 例外は Finally 分岐のステップで続行します。その後のことは、Finally 分岐の実行がどのように終了するかによって異なります。
-
Finally 分岐の実行が正常に終了すると、実行は Try-Catch ステップ全体の後のステップで続行されます。
-
例外が Finally 分岐の実行中にスローされる場合、これは Try-Catch ステップ自体がその例外をスローしたように扱われます。
-
- Try 分岐はスローされた例外で終了し、Catch 分岐は正常に終了する
- Catch 分岐の実行後、ロジックは前のケースのとおりです。
- Try 分岐がスローされた例外で終了するが、Catch 分岐はその例外をリストしない
- この場合、例外は "remembered" となり、実行は Finally 分岐のステップで続行されます。その後のことは、Finally 分岐の実行がどのように終了するかによって異なります。
-
Finally 分岐の実行が正常に終了すると、実行は Try-Catch ステップ自体が "remembered" の例外を再度スローするかのように続行されます。
-
例外が Finally 分岐の実行時にスローされると、これは同じ Try-Catch ステップの Catch 分岐によって処理されません。代わりに、これは Try-Catch ステップ自体がその例外 (つまり、Finally 分岐によってスローされた例外) をスローしたように扱われます。 "remembered" の例外はこの時点では事実上 "forgotten" です。
-
- Try 分岐はスローされた例外で終了し、当該の Catch 分岐もスローされた例外で終了する
- これは、"remembered" の例外が Try 分岐ではなく、Catch 分岐によってスローされたものであることを除き、前のケースと同様に処理されます。上記のように、Try 分岐によってスローされた例外が Catch 分岐の実行開始時に完全に処理され、"forgotten" になります。
事前定義の例外
ステップで実行中にエラーが発生した場合、次のいずれかの例外がスローされます。これらの例外は必要に応じて Throw ステップによって明示的にスローすることもできます。
ステップ エラーのためにスローされると、事前定義の例外にはその問題を説明するメッセージが含まれます。このメッセージは、例外がワークフローの Try-Catch ステップで処理されず、代わりに Desktop Automation ステップの実行を終了する場合に利用できるようになります。
事前定義の例外は、名前の最後の "Issue" で識別できます。
- FinderIssue: ファインダーでエレメントが見つからなかった場合にスローされます。
- DeviceIssue: ステップの実行を妨げるデバイスまたはドライバの問題の場合にスローされます。
- IncorrectValueIssue: "one".substring(-1) の -1 など、エクスプレッションの値が使用場所で適切でない場合にスローされます。
- ExtractIssue: 抽出ステップで抽出に失敗した場合にスローされます。
- DivisionByZeroIssue: エクスプレッションの評価中にゼロ除算 (またはゼロ剰余) が発生した場合にスローされます。
- OverFlowIssue: エクスプレッションの評価でオーバーフローが発生した場合にスローされます。
- ConversionIssue: エクスプレッションの評価中に "one".integer() など、タイプ間の変換が失敗した場合にスローされます。
エクスプレッションがステップの一部であるときはいつでも、ステップの実行で次の例外がスローされることがあります。
-
IncorrectValueIssue
-
DivisionByZeroIssue
-
OverflowIssue
-
ConversionIssue
以下の表に、ステップ、ファインダー、およびその他のワークフロー エレメントでスローされる可能性のある例外をリストします。エクスプレッションの問題は、エクスプレッションを持つステップによってスローされる問題です。
ワークフロー エレメント |
例外 |
---|---|
ステップ |
|
クリック |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
テキストを入力 |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
キープレス |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
スクロール |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
マウス移動 |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
クリップボード設定 |
DeviceIssue、エクスプレッションの問題 |
割り当て |
エクスプレッションの問題 |
値を抽出 |
DeviceIssue、FinderIssue、エクスプレッションの問題、ExtractIssue |
クリップボードを抽出 |
DeviceIssue |
画像抽出 |
DeviceIssue、FinderIssue、エクスプレッションの問題、ExtractIssue |
ツリーを XML として抽出 |
DeviceIssue、FinderIssue、エクスプレッションの問題、ExtractIssue |
画像からテキスト抽出 |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
ループ |
なし |
条件 |
エクスプレッションの問題 |
グループ化 |
なし |
With |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
ガード チョイス |
上記の表にリストされているガードによって異なります |
Try-Catch |
なし |
Break |
なし |
Throw |
なし |
Return |
エクスプレッションの問題 |
開く |
DeviceIssue、エクスプレッションの問題 |
デバイスに接続 |
DeviceIssue、エクスプレッションの問題 |
リモート デバイス アクション/スクリーンのロック コマンド |
DeviceIssue、エクスプレッションの問題 |
リモート デバイス アクション/その他 |
DeviceIssue |
エクスプレッション | |
任意のエクスプレッション |
IncorrectValueIssue、DivisionByZeroIssue、OverFlowIssue、ConversionIssue |
ガード | |
数秒が経過したとき |
エクスプレッションの問題、IncorrectValueIssue |
ロケーションが見つかった場合 |
エクスプレッションの問題、DeviceIssue、FinderIssue |
ロケーションが見つからなかった場合 |
エクスプレッションの問題、DeviceIssue、FinderIssue |
除去されたロケーション |
エクスプレッションの問題、DeviceIssue、FinderIssue |
ツリー変更停止 |
エクスプレッションの問題、IncorrectValueIssue、DeviceIssue、FinderIssue |
ファインダー | |
デバイス ファインダー |
DeviceIssue |
アプリケーション ファインダー |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
コンポーネント ファインダー |
DeviceIssue、FinderIssue、エクスプレッションの問題 |
ガード チョイス ステップは、ステップで使用されるガードに応じて、以下の例外をスローします。
ガード |
例外 |
---|---|
数秒が経過したとき |
エクスプレッションの問題 |
その他 |
DeviceIssue、FinderIssue、エクスプレッションの問題 |