RPAロゴ
ある条件に該当しているときだけ操作を行いたいケースで、どのようにスクリプトを書くのかを説明します。

下の画像は、[マウスのプロパティ]ウインドウで、[ポインターオプション]タブを表示しているところです。『[ポインターの軌跡を表示する(D)]にチェックが入っていなければ、チェックを入れる。』という操作を行いたいとき、どのようにスクリプトを書けばいいかを考えます。
分岐-1
チェックが入っていない状態の画像をキャプチャして、次のようにスクリプトを書いたとします。
分岐-2
チェックが入っていない状態でこのスクリプトを実行すると、[ポインターの軌跡を表示する(D)]をクリックすることができて目的が達成できるのですが、チェックが入っている状態で同じスクリプトを実行すると、FindFailed例外エラーが発生して、スクリプトの実行が異常終了してしまいます。
なぜならclick()は、『引数に指定した画像を探してクリックする。指定した画像が見つからなかったときはFindFailed例外エラーを発生する。』という仕様になっているからです。『画像が見つかったらクリック、見つからなかったら何もしない。』という処理を行いたいときは、exists()を使って、画像の存在確認を行って、その結果を判定して処理を分岐する必要があります。

条件を判定して処理を分岐するときは、if 文を使います。今回の例では、条件に該当するときだけclick()を実行するのでif しか使いませんが、条件に該当しないときに何か別の処理を実行する場合には、if ・・・ else ・・・の形式を使います。
分岐-3
この書き方は、exists()で画像の存在確認を行って、存在した場合にclick()でもう一度画像の検索を行ってクリックします。
Sikuliでは、直近で見つけた画像の情報(マッチングオブジェクト)を保持しているので、exists()で存在確認をした画像についてclick()を行う場合には、画像を指定せずにclick()を使うことができます。画像の検索を省略できる分、こちらの書き方の方が少しだけclick()の実行スピードが速くなります。
分岐-4
■exists()の使い方についての補足
find()やexists()などの検索系のコマンドは、指定した画像が見つからないとき最大3秒待ってから結果を返します。exists()で画像の存在確認を行うときは、指定した画像が有るか無いかをすぐ確認したいのが普通なので、画像が存在しない場合に3秒待たされるのは困ります。その場合には、待ち時間ゼロを指定してexists()を実行しましょう。
分岐-5
[9]操作フローの見える化< >[11]処理の繰り返し