はじめまして、UiPath超初心者です。
現在、社内のウェブシステム内で検索 → 検索結果を押下という処理をしたく
① Excelファイルを範囲選択しDataTableへ格納
② DataTable内の項目を1件ずつ検索欄へ入力し検索をかける
③ 検索結果が1件であるか確認するため『要素の有無を検出』アクティビティを使用
⇧ここで誤判断をしてしまっているようで、その後処理が思うように進みません。
要素の有無を検出のセレクタ【aaname】に、'{{検索項目}}'と指定してみたりしたのですが
それでも、検索結果があるのにもかかわらず『false』を返します。
また、2件目がヒットした場合はExcelに『検索結果が2件以上あるため未処理』としたいのですが
検索結果が1件の場合でも2件目に『true』と返してきてしまいます。
どのように設定すればよいのでしょうか?
ご教示お願いいたします。
Yoichi
(Yoichi)
June 3, 2024, 3:39am
2
要素有無で判断するよりも、表抽出で結果を取得して、その行数から判断したほうが良いようにも思えますがいかがでしょうか?
要素有無で判断する場合は、上記だけの情報では判断ができませんので、セレクターエディタやUiExplorerの情報も含めて詳細共有いただけると良いかと思います。
ありがとうございます。
無知で申し訳ございません。
表抽出というのはウェブサイト上の検索結果(表)を抽出し、
そのなかから該当するものをクリックする。という認識でよろしいでしょうか?
また、表抽出アクティビティがどこにあるのかわかりません。
Yoichi
(Yoichi)
June 3, 2024, 3:47am
4
まずは1件のみの判断をしたいとのことですので、表抽出によって出力されたDataTableの行数でこれを判断可能かと思います。
クリックしたいものは、行が1行しかないときに限定されるのであれば、tableRow属性等で固定的に指定しても問題ないと思います。
また、表抽出アクティビティがどこにあるのかわかりません。
リボンメニュー上に表抽出のWizardが起動できるボタンがありますので、こちらから設定してみてください。
Yoichiさんありがとうございます。
表抽出、見つけられました。
こちらで検索対象の項目を選択したことで『ExtractDataTable』に代入にされたようなのですが
【ExtractDataTable.Rows.Count】で『1』なら要素をクリックするような仕様にすればいいということですかね?
最初に読み込んだエクセルファイルの検索項目を1件ずつ検索→処理→検索→処理…
としたいのですが、その場合、表抽出した内容はどのように更新されるのでしょうか?
Yoichi
(Yoichi)
June 3, 2024, 5:57am
6
実際には取得した表を確認する必要がありますが、きれいに抽出できている場合はそのようになるかと思います。(まれにヘッダ部分を実データとして取り込んでしますケースもあるので、そのようなケースはその分を調整します。)
最初に読み込んだエクセルファイルの検索項目を1件ずつ検索→処理→検索→処理…
としたいのですが、その場合、表抽出した内容はどのように更新されるのでしょうか?
検索する度に表抽出すれば、下記の追記チェックがOFFなら、都度新たな表として取り込まれると思いますので、特段の処理は不要と思います。
Yoichi
(Yoichi)
June 3, 2024, 6:14am
8
k.sakaguchi0804:
こちらは警告が出たままでよいのでしょうか?
動作に問題はないと思いますが、気になるようでしたら、最大ページ取得数を1に設定してみてください。
ありがとうございます!
無事に警告メッセージが消えました。
表抽出 → 抽出結果が1件なら1件目をクリック(UiPath.Core.Activities.Click)で
選択したのですが、DataTable1件目(画面上で指定で指定したものと同じ検索番号)
のものはしっかりクリックしたのですが、以降のデータ(画面上で指定した数字と違う)は
クリックしてくれませんでした。
UiPath.Core.Activities.Clickの画面上で指定した画像はまんまその文言ではないと
クリックしてくれないのでしょうか?
Yoichi
(Yoichi)
June 3, 2024, 6:29am
10
Clickアクティビティのセレクターはどのようになっていますでしょうか?
基本的には厳密セレクターを使用し、tableRow属性で指定、変動する属性は除外して指定すると良いかと思います。(UiExplorer等も活用いただくと良いかと思います。)
厳密セレクター=セレクターを編集のことでしょうか?
① Excelファイルを選択し範囲の選択でDetaTableへ
② 検索欄に row(“検索項目”).ToString()を入力
③ 代入アクティビティを使用し『検索項目 = row(“検索項目”).ToString()』を宣言
④ 検索結果を表抽出
⑤ 表抽出.Rows.Count = 1なら検索結果をクリック
⇧このクリックのセレクタのaaname部分を’{{検索項目}}'としただけであとは変えていません。
そのほかにも指定してあげなくてはいけないのでしょうか?
Yoichi
(Yoichi)
June 3, 2024, 8:12am
12
具体的な検索項目やセレクター内容がないと判断が難しいです。
ただ検索で対象が1行しかないことが確定しているのであれば、動的セレクターを使わずとも、1行目をクリックすれば実現できるかと思いますし、そちらの方が簡便かと思い上記の案を提示しております。
ありがとうございます。
基本は1件ですが、0件の場合は『対象データなし』、2件以上の場合は『複数のため未処理』
というステータスを持たせたいので、イレギュラーが判断できた方がいいです。
1行目をクリックするには要素の有無を検出などを使用するのでしょうか?
質問ばかりで申し訳ありませんがよろしくお願いいたします。
Yoichi
(Yoichi)
June 3, 2024, 8:53am
14
表抽出したDataTableの行数で判断できるのでその必要はないように思えます。例えば以下の様にすると良いかと思います。(単にIFアクティビティでも問題ないと思います)
洋一さんありがとうございます。
無事に表抽出からスイッチ文を使用して条件を
1件のものをクリック、とすることができました。
しかし、クリック(UiPath.Core.Activities.Click)を使用して
対象項目を設定したのですが、
『このセレクターに対応する UI 要素が見つかりませんでした:』というエラーが
発生してしまいます。ほかのRPAで使用しているものは正常に動作するのですが…
なぜなのでしょうか?
Yoichi
(Yoichi)
June 4, 2024, 5:39am
16
こちら詳細(エラーメッセージ全文等)共有可能でしょうか?
以下になります。
(タグ情報が反映されないようなので後ろの/>は削除しました。)
1件目のデータを押下: このセレクターに対応する UI 要素が見つかりませんでした:
[1] <html app=‘chrome.exe’ htmlwindowname=‘<td class style="text-align: center;">’ title=‘S検索画面’
[2] <webctrl aaname=‘'P010-000000'’ parentid=‘content’ tag=‘A’
セレクター タグの検索に失敗しました:
[1] <html app=‘chrome.exe’ htmlwindowname=‘<td class style="text-align: center;">’ title=‘S検索画面’
見つかった最も近い一致は次のとおりです:
[67%] <html app=‘chrome.exe’ htmlwindowname=‘’ title=‘S検索画面’
Yoichi
(Yoichi)
June 4, 2024, 5:52am
18
htmlwindownameの内容が一致していないためエラーとなっています。
これを設定している箇所、おそらくターゲット配下のウインドウセレクタープロパティとおもいますが、htmlwindownameの属性を削除してみてください。
あるいは上記でも情報が欠落しているようでしたら、スクリーンショットを撮って画像で貼り付けてもらえますでしょうか?
htmlwindownameの属性を削除してみましたが、結果は変わりませんでした。
クリックアクティビティを使用 → 画像を設定とすると、同じ値のものはクリックしますが
検索項目が変わった場合にクリックしてくれません。
aanameを削除すると、設定した画像の値すらクリックしてくれませんし、
検索項目の値を変数に代入してaanameに持たせてもできません。。。
本来クリックアクティビティは値までは見ていないのでしょうか?
Yoichi
(Yoichi)
June 4, 2024, 6:21am
20
エラーメッセージとクリックのプロパティパネル、厳密セレクターのそれぞれにスクリーンショット共有可能でしょうか?
Yoichi
(Yoichi)
June 4, 2024, 6:44am
22
上記エラーの直接原因は不要なシングルクォートが含まれていることです。
ただ先のPOSTで言及しています通りtableRow属性を使えばaaname属性は無くても良いかもしれません。