[DA]「For Each Loop(繰り返しループ)」ステップ

フォローする

「For Each Loop(繰り返しループ )」ステップは、アプリケーション ツリー内のノードを反復処理します。

[範囲ファインダー] と呼ばれるコンポーネント ファインダーがあります。これは、ツリーの一部を特定し、反復するノードを検出します。
イテレーションは、スコープ ノードの下にはないノード (スコープ ファインダーによって検出されたノード) についてはループしません。
[範囲ファインダー] は、ステップ内のすべてのファインダーと似ています。これは、このステップが動作するツリーの一部を検出するためです。スコープ ファインダーは常に、「For Each Loop(繰り返しループ )」ステップの中で一意となる名前を持つ必要があります。

「For Each Loop(繰り返しループ )」の要素ファインダーは、ファインダーの名前と "> DIV" などの相対セレクターで設定されています。
要素ファインダーはスコープ ファインダーと同様に、常に繰り返しステップの中で一意となる名前を持つ必要があります。

相対セレクターは、ループするエレメントを検出するために使用されます。このセレクターは、別のセレクターと結合されて新しいセレクターを形成するため、相対セレクターと呼ばれます。
スコープ ファインダーにセレクター "DIV[class="someClass"]" があり、要素ファインダーのセレクターが "> DIV" の場合、結合セレクターは "DIV[class="someClass"] > DIV" のようになります。
反復するエレメントを検出するために使用される実際のファインダーはスコープ ファインダーと本質的に同じですが、セレクターがこの新しい結合セレクターに置き換えられます。

「For Each Loop(繰り返しループ )」ステップは次のように動作します。
開始イテレーションにて、結合されたファインダーにより最初に検出されたエレメントは、エレメント ファインダーの名前となります。
次のイテレーションで検出されるエレメントは、前のエレメントの次に見つかるエレメントです。
繰り返しステップの実行中にツリーが変更され、新しいエレメントがツリーに表示された場合、現在のイテレーションのエレメントの前または後に現れるかどうかに応じて、この新しいエレメントがその後のイテレーションに含まれる場合と含まれない場合があります。

エレメント ファインダーで見つかったエレメントは、他のファインダーのリファレンスとして、ループの本文内で使用されます。

以下は、「For Each Loop(繰り返しループ)」ステップの一例です。


繰り返しループ ステップ

 

レコーダー ビューの [ループ] メニュー

「For Each Loop(繰り返しループ )」ステップは、他のステップと同様にオートメーション ワークフロー ビューに直接挿入することができますが、レコーダー ビュー内で右クリックし、ショートカット メニューを使用して挿入する方が便利です。

[ループ] と呼ばれるメニュー項目を選択します。ループには次の 4 つのサブメニューがあります。

  • すべての兄弟

  • 各 <タグ名> 兄弟

  • 各 <タグ名> (<レベル>) 先祖

  • 各テーブル行

これらのサブメニューは、現在選択されているエレメントに応じてさまざまなエレメントをループする「For Each Loop(繰り返しループ )」ステップを作成するのに役立ちます。
DSでは、「For Each Loop(繰り返しループ )」ステップにガード チョイス ステップが挿入されます。これにより、繰り返しステップが実行される前にスコープ ファインダーがツリー内に確実に表示されるようになります。

 

すべての兄弟

このメニュー項目は、選択されたタグのすべての兄弟をループする「For Each Loop(繰り返しループ )」ステップを挿入します。スコープ ファインダーは、選択されたエレメントの親 (スコープ ノード) を検出し、エレメント セレクターは "> *" となります。つまり、スコープ ノードの下にある任意の子ノードを検出します。

 

各 <タグ名> 兄弟

このメニュー項目は、選択されたタグのすべての兄弟を同じタグ名でループする「For Each Loop(繰り返しループ )」ステップを挿入します。
スコープ ファインダーは、選択されたエレメントの親 (スコープ ノード) を検出し、選択されたエレメントがタグ名 P を持つ場合、エレメント セレクターは "> P" となります。

 

各 <タグ名> (<レベル>) 先祖

このメニュー項目は、DA ワークフローで組み込みブラウザを使用する場合にのみ使用します。
このコマンドは、ループのための適切な先祖ノードを検索します。そうすることで、自身に似た兄弟ノードが複数あるノード、または以下のタグ名のエレメントを持つ先祖ノードを探します。
"TR"、"LI"、"TD"、"TH"、"DD"、"OPTION"、"PARAM"

以下の場合、2 つのノードが類似しています。

・タグ名が同じで、クラス属性がない。
・タグ名が同じで、同じクラス属性である。

次の HTML で内部の P タグを 1 つ選択すると、そのループは囲んでいる DIV タグ内の 1 つの P タグを繰り返さずに、P タグを含む DIV タグをループします。

<例>タグを含む DIV タグをループします。

<DIV> 
 <DIV>
  <P>1</P>
</DIV>
<DIV>
  <P>2</P>
</DIV>
</DIV>

 

メニュー項目の丸括弧内のレベルは、選択されたエレメントのいくつ上のレベルに実際のループ エレメントが配置されているかを示します。上記の例では、このレベルは 1 です。メニュー項目に表示されるタグ名は、実際のループ エレメントのタグ名です。

 

各テーブル行

このメニュー項目は、DAワークフローで組み込みブラウザを使用する場合にのみ使用します。このコマンドは、表のすべての行を繰り返し処理する「For Each Loop(繰り返しループ )」ステップを挿入します。

 

繰り返しループ ステップの使用

「For Each Loop(繰り返しループ )」ステップを使用する際には、以下のような事柄を考慮する必要があります。

 

イテレーションのスキップ

一部の初期ノードや各 2 番目のノードなど、一部のエレメントをループ中にスキップしたい場合は、ループ内の最初のステップとして、テストが true である場合に継続される条件ステップを挿入します。たとえば、次の条件では、ループはすべての偶数回の繰り返しをスキップします。

  =i % 2 == 0

 

繰り返しステップ内のファインダー

BizRobo! は、検出されたエレメントに相対的な要素を自動的に検出します。
レコーダー ビューで要素を右クリックしてアクションを挿入する際に、この要素が検出された指定エレメント内にある場合、生成されたファインダーは、次のように検出された要素に対して相対的になります。

オートメーション デバイス ビューで要素を右クリックしてアクションをループに挿入

 

結果は下図のようになります。※実際の結果は、選択したエレメントと、エレメント ファインダーに付けた名前によって異なります。

検出されたエレメントに関連するファインダー

 

参考リンク

Device Automationでのループと IF文 処理