WinActorでブラウザ操作を行っていると、同じクラス名やタグ名を持つ要素が複数存在するケースに直面します。特に、テーブルやリスト形式でデータが並んでいる画面では、「該当する行を特定して、その行にあるボタンをクリックしたい」というシナリオが頻出です。この記事では、Facilitylist内に複数あるsearch-tableとeditbuttonから、変数の値に一致する行を特定してクリックする方法を具体的に解説します。
WinActorで複数要素を扱うときの基本的な考え方
WinActorは、Webページ上の要素をXPathや属性情報をもとに特定し、操作を実行します。同じタグやクラスが複数ある場合、基本的には「インデックス」を使って要素を指定する必要があります。しかし、実務ではインデックス指定ではなく「値に一致する行を探す」方がメンテナンス性が高く、より柔軟に対応できます。
今回のようにsearch-tableとeditbuttonが複数あるケースでは、まず対象の行を判定するロジックを組み、その行に対応するeditbuttonをクリックする流れを構築します。
シナリオ構成の全体像
シナリオの基本構成は以下のようになります。
- ① Facilitylist内のsearch-tableのテキストを順番に取得
- ② 変数に格納している値と一致するか判定
- ③ 一致した行番号を取得
- ④ 一致した行のeditbuttonをクリック
この流れを作ることで、複数のテーブル要素があっても正確に目的のボタンを押すことができます。
search-tableの値をループで取得する
まず、「繰返し」ノードを使ってsearch-tableの値を順番に取得します。
WinActorの「IE操作(要素の取得)」または「Web操作」ライブラリを利用し、search-tableのテキストを1件ずつ変数に格納していきます。XPathを利用する場合は、以下のようにインデックスを動的に指定できるようにします。
//table[@class='search-table'][{インデックス}]
これにより、複数行を一つずつチェックできるようになります。
一致判定と行番号の取得
次に、取得したテキストと照合対象の変数を「条件分岐」ノードで比較します。
例えば、照合対象の変数が【target_value】で、取得した値が【row_value】だった場合、row_value=target_valueのときにそのインデックス(行番号)を別の変数(たとえば【target_index】)に格納します。
一致したらループを抜けるか、そのまま次のクリック処理に進みます。
editbuttonのクリック処理
一致したインデックスを使って、該当するeditbuttonをクリックします。ここでもXPathを利用し、以下のように動的に行番号を指定します。
//button[@class='editbutton'][{target_index}]
これにより、変数の値と一致するsearch-tableの行に対応したボタンのみをクリックすることが可能になります。
もしeditbuttonがaタグ(リンク)であれば、「クリック」ノードではなく「リンクURL取得」ノードを利用して値を取得することもできます。
実例:実務での活用例
例えば、社員一覧のテーブルの中から「山田太郎」という名前を探し、その行にある「編集」ボタンをクリックするケースを想定します。
- 【target_value】=「山田太郎」
- search-table内に複数の名前
- 対応するeditbuttonをクリック
この場合、テキスト比較と動的XPathを組み合わせることで、特定の行だけを操作できます。業務の自動化では非常に有効な手法です。
注意点とトラブルシューティング
複数の要素を扱う際によくあるトラブルと解決策を紹介します。
- 要素がうまく取得できない→ブラウザの開発者ツールでXPathを再確認する
- ボタンがクリックできない→要素が非表示になっていないかチェック
- インデックスがズレる→HTML構造の改修によりXPathが変わっていないか確認
また、ID属性がある場合はID指定の方が安定するため、可能であればIDを活用することもおすすめです。
まとめ
WinActorで複数のsearch-tableとeditbuttonから一致するデータを見つけてクリックするには、「ループ処理+動的XPath+条件分岐」の組み合わせが有効です。
この方法を活用すれば、単純なクリック処理だけでなく、柔軟で実用的な自動化シナリオを構築できます。特に、テーブルデータの選択処理は業務で頻出するパターンなので、早い段階でマスターしておくと大きな時短効果を発揮します。


コメント