1.はじめに
リストボックス形式になっている要素をクリックしようとした際に、対象が画面上に表示されておらず、クリックができないという場面に出くわすことがあります。解決方法としては、人の操作と同じようにマウススクロールをするという方法がありますが、マウススクロールアクティビティの上手な使い方がわからず、うまく実装できないという悩みをお持ちの方も多いと思います。
以下のようなユースケースを考え、実装方法を確認してみましょう。
上図のようなデスクトップアプリケーションにおいて、現在表示されていない「メロン」をスクロールしてクリックしたいというユースケースを想定します。
2.環境情報
利用する環境は以下の通りとなります。
ソフトウェア名 | バージョン情報 |
---|---|
OS | Windows10 |
UiPath Studio | 22.10.5 |
UiPath.UIAutomation.Activities | 22.10.5 |
3.実装方法
◆実装の説明
クリック対象の「メロン」が完全に表示されているかを確認し、表示されていない(出現していない)場合スクロールを繰り返し行うという方法をとります。
今回は指定回数繰り返しを利用し、「メロン」が表示されていない(出現しない)場合は「マウススクロール」アクティビティにより、スクロールを行います。一方で、「メロン」が表示されている(出現した)場合は「繰り返しを終了」アクティビティにより繰り返し処理を抜けた後に、「メロン」をクリックします。
また、10回に到達しても「メロン」が表示されていない(出現しない)場合は、例外が発生するようにしています。これは、無限ループになることを防ぎ、ロボット実行の安全性を考慮した実装をしています。実際の最大数は選択項目の数などを考慮して設定していただくことをお勧めいたします。
◆設定のポイント
設定ポイント①:可視性の確認
「アプリのステートを確認」アクティビティでは、プロパティ内「入力」 -「可視性を確認」を「完全に表示されている」にすることで、画面上に可視できるかを判断することが可能となります。
設定ポイント②:スクロール対象の指定
「マウススクロール」アクティビティでは、以下に示すようにリストボックスの要素を指定することが必要となります。
画面上のどの部分をスクロール対象とするかしっかりと対象の画面要素がどこかを考えましょう。
画面全体であれば、フォーム全体(デスクトップAPの場合)、Webページ全体(WebAPの場合)というように正しい位置を指定しましょう。
4.最後に
要素の存在確認ロジック(クリック要素が出現しているかの確認や出現していない場合の対処)と操作ロジック(実際のクリック操作)を分離することで、以下のような効果があると考えています。
・保守性向上:対抗システムに変更が発生した場合も対処がしやすい
・可読性向上:処理の目的がパーツごとにわかりやすい
皆様も完成したワークフローに対して○○性という言葉を意識して評価すると、良いワークフローが何かということを考えるきっかけになると思いますので、参考にして頂ければと思います。