いちばん下のラジオボタンをクリックしたい

UiPath Studio 2023.10.0 EnterPrise Licenseのユーザです。

Edgeブラウザで、ラジオボタンが縦方向に複数並んでいます。いちばん下のラジオボタンをクリックするアイデアをご教示ください。

UI Exploreでラジオボタンの厳密セレクタを調べると、上から順番に

Check

となっていたので、動的セレクタを使って、Checkアクティビティの厳密アクティビティを

Check2

と書いて

int_radioを3始まりでインクリメントして、Checkアクティビティで順番にチェックしていき、失敗した数値の一つ前の数値を取得すればよいことは分かりますが、具体的なコードが分かりません。
コードが書ける方、アドバイスをお願いします。

Hi @gorby

For example assume there is 5 radio buttons and you have to click on last radio button mean 5th one, follow the below process.
→ Take an assign activity and create a Count Variable with Int datatype. And initialize the Count as 1.

- Assign -> Count = 1

→ Use the for each Ui element activity and indicate the radio buttons. Output - CurrentElement
→ Inside For each Ui element activity insert the If condition to check the Count.

- Condition -> Count = 5

→ In then block insert the click activity and pass the CurrentElement in the Input Element option of the properties in click activity.
→ Don’t give any activity inside the else block.
→ After If condition take an assign activity, to increment the Count.

- Assign -> Count = Count+1

Check the below workflow for better understanding,

Hope it helps!!

「失敗すること」を確認するのはパフォーマンス的にあまり良くないので、
DataScraping (Table Extraction)であらかじめ表を抽出して、行数を数えておくか、
繰り返し(UI要素)でイテレートすると、終わりを意識しなくて済むので
何れかの方が良いのではと思います。

いつもお世話になっております。アドバイスどおりやってみようとは思いますが、Checkアクティビティが「失敗すること」をコードでどう確認するのか、興味がありますので、具体例で見せていただけないでしょうか。

You can do one thing @gorby

First use Extract Datatable activity to extract the structured vertical radio button as a datatable. Then the output of Extract Datatable activity is Extract_dt variable.
→ Then take the Row count of Extract_dt and store in a Variable called Count.

- Assign -> Count = Extract_dt.rows.count.toString

→ Use the for each Ui element activity and indicate the radio buttons. Output - CurrentElement
→ Inside For each Ui element activity insert the If condition to check the Count.

- Condition -> Count = 1

→ In then block insert the click activity and pass the CurrentElement in the Input Element option of the properties in click activity.
→ Don’t give any activity inside the else block.
→ After If condition take an assign activity, to increment the Count.

- Assign -> Count = Count-1

The above process is dynamic we just take the count from the datatable rows count, if the radio button count changes it will work.

Hope it helps!!

他の方の回答に繰り返し(UI要素)でIterateする画像の事例がありました。
Iterateする回数が決まっていることが前提のようにお見受けしました。Iterateする回数が決まっていなくても、このアクティビティは使えますか?

Iterateする回数が決まっていることが前提のようにお見受けしました。Iterateする回数が決まっていなくても、このアクティビティは使えますか?

繰り返し回数は、画面要素から動的に決定されます。

Checkアクティビティが「失敗すること」をコードでどう確認するのか、興味がありますので、具体例で見せていただけないでしょうか。

TryCatchで捕捉します。

image

繰り返し回数は、画面要素から動的に決定されて、プロパティのどこに反映されるかよく分かりません。
一例として、下記サイトの中央に縦に並んでいるボタンをこのFor Each UI Element アクティビティを使って上から順番にクリックするサンプルプログラムを作成お願いできないでしょうか。
繰り返し回数がプロパティのどこの変数に設定されるかと、プログラマがこの変数を作成する必要があるのかないのか(いわゆる暗黙変数かどうか)も併せてご教示ください。

例えば以下になります。

繰り返し回数がプロパティのどこの変数に設定されるかと、プログラマがこの変数を作成する必要があるのかないのか(いわゆる暗黙変数かどうか)も併せてご教示ください

CurrentIndexが暗黙で設定されますが、上記すべてのボタンをクリックするケースにしても、最後のボタンだけをクリックするケースにしても動的にセレクターを生成する必要がないので、使用する必要ないと思います。

いただいた画像はすべてのUI Elements をクリックする事例でしょうか?
最後のボタンだけをクリックする場合は、おそらくUI Elements Collectionを編集する必要があると思いますが、いただいた画像ではその方法が分からないので、編集方法が分かる画像を提供お願いできないでしょうか?
もしフィルターを設定する必要があれば、その方法をご教示ください。

ご依頼がそうでしたので、そうです。

最後のボタンだけをクリックする場合は、おそらくUI Elements Collectionを編集する必要があると思いますが、いただいた画像ではその方法が分からないので、編集方法が分かる画像を提供お願いできないでしょうか?

UI Elements Collectionなるものはありません。例えば以下で可能です。

ボタン数に依存せず問題なく動作します。そのようにお考えになる理由を共有いただくと良いかと思います。

私の方でも、サンプルプログラムを作成してみました。
Yoichi様の案だと、UI Element変数「現在の要素」に繰り返しを始める際の、最初のセレクタ情報を入れる個所がないような気がしますが、どこで入れているのでしょうか?For Each UI Element アクティビティのプロパティを探しましたが、分かりませんでした。私案ですと最初のセレクタ情報を入れるためにダミーのクリックが必要な気がいたしました。(添付画像参照)
画像だと正確な情報が伝わりませので、WFをUploadしていただけないでしょうか。

ご質問の意図がよくわかりませんが、添付します。
基本的にはWizardを通じてこのアクティビティが処理してくれます。

すべてのボタンをクリック
Main.xaml (14.9 KB)

最後のボタンをクリック
Sequence.xaml (14.5 KB)

最後のボタンをクリックのサンプルプログラムを拝見しました。
Check Stateアクティビティのように、UIElement変数の値を出力して、クリックアクティビティで入力するような形を想定していましたが、For Each UI Elementアクティビティでは、明示的にUIElement変数の値を出力する箇所は無いという認識で合っていますか?

これはロジックの問題で、取得したUiElementを別変数に毎回セットして、それをループの直後で使用することにより最後のUiElementを特定しています。ですので、ForEachUiElementで取得したUiElementを結果的に使用していることになります。

結果的には理解しましたが、さすがUiPath、難解ですね。
私の目には、ロジックの問題ではなく、アクティビティ間の設計思想(特にプロパティ設定項目)が統一されていないことが難解に感じる原因のように思えます。
実務でCheck Stateアクティビティを良く使う私には、For Each UI ElementアクティビティではUI Elementの出力が無いのにどうして入力があるのか、理解できませんでした。アクティビティ全体で設計思想(特にプロパティ設定項目)を統一していただくと分かりやすくなるかと思います。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.