「同じUi要素にアクセスするアクティビティが複数ある場合は UiElement 変数を活用することで改修の手間を減らすことができる。」という記事を以前投稿した。そちらの記事は当時のクラシックアクティビティで作成したものなので、本記事ではモダンアクティビティでの方法について紹介する。
UiElement 変数を使わない場合
上図のフローでは、次の順番で処理を行っている。
①入力欄に変数 inputValue
の値を入力する。
②入力欄に入力された値を取得し、変数 getValue
に格納する。
③ inputValue
と getValue
の値が一致していることを確認する。
④入力欄にEnterキーを入力する。
ここで、①②④ではいずれも同じUi要素(入力欄)に対して操作を行っているので、同じ内容のセレクターを3回取っているということになる。このままでも動作上は問題ないが、もしUi要素に変更があった場合は①②④のセレクター全てを修正する必要があり、少々手間がかかる。
なお UiElement 変数の話とは少しズレるが、入力値のチェックを行いたい場合は『実行を検証』で確認できるようになっている。これについても後ほど記載する。
UiElement 変数を使う場合
上図のフローでは UiElement 変数を活用している。
モダンでは「要素を探す」アクティビティは無くなったが、代わりにUi要素を操作するアクティビティの多くでUiElement 変数を出力できるようになっている。
一番最初にUi要素を触る「文字を入力」アクティビティで出力要素を UiElement 型の変数 uieInputField
に出力し……
「テキストを取得」と「キーボードショートカット」では入力要素に変数 uieInputField
を使用している。
このように同じUi要素を何回か操作する場合、一番最初のアクティビティでUi要素を変数に出力し、以降のアクティビティではその要素を入力として使うことで、Uiに変更があった場合でも先頭のアクティビティのセレクターだけを修正するだけで済むようになる。
「アプリのステートを確認」での例
「アプリのステートを確認」アクティビティでも UiElement 変数を活用するとスマートに書くことができるという例を紹介する。
「アプリのステートを確認」は、上書き保存確認ダイアログなど表示されるかわからないUiを確認する場合によく使われる。表示されればOKを押して閉じ、表示されなければ何もしないという具合だ。
上のフローでは『名前を付けて保存の確認』が表示されれば『はい』を押し、表示されなければ何もしないという処理を行う。こちらも動作上は問題ないが、やはり少し冗長な部分がある。
UiElement 変数を活用したのがこちらのフローだ。「アプリのステートを確認」で『名前を付けて保存の確認』ダイアログ全体ではなく『はい』ボタンのUi要素を取得して出力させ、「クリック」では「アプリのステートを確認」が取得したUi要素を入力要素として使っている。
こうすることで、Ui要素の取得を一か所にまとめているだけではなく。本来「クリック」アクティビティ等に必要な「アプリケーション/ブラウザーを使用」の配置を省略できている。
補足:「実行を検証」について
モダンからは「文字を入力」や「クリック」などで『実行を検証』の機能が使えるようになっている。この機能は操作した後の状態を確認してくれるもので、「文字を入力」では入力後にターゲットの入力値を読み取り、入力しようとした値と実際に入力された値が一致しているかを検証してくれる。
要はモダンでは『実行を検証』を設定しておけば「文字を入力」アクティビティだけ入力確認まで行ってくれるので、以下のフローの例でいえば「テキストを取得」と「True か確認」の部分の処理が丸々不要になる。これらの機能も上手く活用し、よりコンパクトで改修しやすいフローを目指していきたい。
動作環境
- UiPath.UIAutomation.Activities v25.10.12
- UiPath.System.Activities v25.6.1