
【いきなりStudio22】(実践編)[UiPath✖YouTube]ライブラリでガチろう~アプリケーションを開く/閉じるのついでに先にライブラリの説明をば( ´∀` )
さてと前回、
の最後で、

て予告をしていたんだけど、アタッチの詳しい組み込み方は、次回説明するが
実際に、いきなりブラウザのアタッチだけ組んで、Edgeが閉じた状態で実行すると、

理由は簡単で、
ブラウザーのアタッチアクティビティには、
ブラウザを開く機能まではないから
👉(既に開いてる)既存のブラウザに
アタッチしに行って、
何かその後の処理をしてくアクティビティ
↓
開いてないブラウザにいきなりアタッチしても、
そらエラー起こるわ( ´∀` )
なので、今回は予定変更で先に、WEB操作をするロボットではよく使う
アプリケーションを開く
アプリケーションを閉じる
アクティビティについて触れながら、
ライブラリの考え方
まで説明してく💃
んだば、早速
今回のアクティビティ
で詳細はココを確認してほしいけど、内容薄いので~~~( ´∀` )
実際に操作していこう( ´∀` )
今回使うソースファイル:RobotMain.xaml

基本操作
操作自体はめちゃくちゃ簡単で







👉セレクターの要素がしっかり取得できてる
この画面で表示されてるタグを見ると、
<html app='msedge.exe' title='新しいタブ' />
って感じで
title='新しいタブ' /
になっているけど、Edgeの今後の仕様変更なんかで、必ず、Edgeを開いた初期状態で新しいタブってタイトルのタブが開くとは限らない。
👉別にタイトル自体は要らないんだけど、残しておいても問題ないので、
ワイルドカード:*
(*部分は何でもOKな
ババ抜きのババみたいなもん)
を使って
<html app='msedge.exe' title='*' />
に変更。


保存ボタンで閉じる
同じ要領で



<wnd app='msedge.exe' cls='Chrome_WidgetWin_1' title='*' />
<ctrl name='新しいタブ - Microsoft Edge' role='pane' />
<ctrl name='閉じる' role='push button' />
てな感じで~~~
ファイルをデバッグしてみると、

正常終了
念のため、複数のEdgeを別ウィンドウで立ち上げて再実行してみよう

すると、正味3つのEdgeが開くはずなんだけど、実行

ここでポイント①:ブラウザを開く、閉じるって、WEBを扱うロボットでは普通に何回もやりそうな操作
なので、前回でも話した
オブジェクト指向言語の旨味=再利用
で、
いちいち同じアクティビティを直で組むのは、
非効率的
なので、そんなときは






.xamlファイルが追加出来た


アプリケーションを閉じるも同様に、




で、コイツらは、他のロボットでもよく使う可能性が高いので~~~



追加>フォルダの順でクリック


Open_Edge.xaml、Close_Edge.xamlファイルを今作ったライブラリフォルダに移動


で再び、ファイルをデバッグしてみると、、、

ここまでが基本
実践:エラーまで想定して、トライキャッチなんかでお色直し
■Open_Edge



■Close_Edge



で、今回から直接RobotMain.xamlにエラーを返す.xamlファイルの呼び出しが追加されたので
■RobotMain.xaml



でRobotMain.xamlに引数が増えたのでMain.xamlも変更
■Main.xaml

ココは引数を特に受け取らないので、引数をインポートで引数のみ追加

※普段の実際の組み込み同様に、ここまでのソースで気になる所はここから都度微調整しながら進む💃
例えばOpen_Edgeの要素を確認に、ブレークポイントを設定してファイルをデバッグで実行





エラーメッセージなし💃
Close_Edgeの要素確認でブレークポイントを設定して、ファイルをデバッグを実行




続行していくと、、、

ここでポイント②:Edgeを閉じる操作の方が実は重要
で、

複数のブラウザが開いていると、
👉同じブラウザとか同じ画面を複数開くことになる=後続の処理でセレクターが取れない
↓
異常終了=バグの原因
てことがあるので、今はRobotMain.xamlでブラウザを開く方をはじめに持ってきてるんだけど、

👉最初に開く前にブラウザ操作の前に、
余計なブラウザを閉じるのが普通

例えば、UiPath実行用の端末にしてる場合でも
誰かが知らずにEdgeを開きっぱなしにしてる
更新プログラムの更新後の確認かなんかで、何かしらEdgeが自動的に開いたままになってる
なんてことがあるから
処理の最初にEdgeを閉じてから開き直す
で、実際に実行でやってみると実は

なぜかと言うと、
Edgeが開いていないのに、
Edgeを閉じようとしてるから( ´∀` )
👉Edgeを閉じる操作の前に、要素を確認して、
Edgeが開いてる場合だけ、アプリケーションを終了する操作をしないといけない
ってこと( ´∀` )


<wnd app='msedge.exe' cls='Chrome_WidgetWin_1' title='*' />
<ctrl name='新しいタブ - Microsoft Edge' role='pane' />
<ctrl name='閉じる' role='push button' />
これも新しいタブって名前のタブがないと要素が確認出来ないので、このままだとエラーになる可能性あり( ´∀` )なんでついでに直す
<wnd app='msedge.exe' cls='Chrome_WidgetWin_1' title='*' />
<ctrl name='閉じる' role='push button' />
に変更して、


要素の確認で、この要素が取得出来た場合だけ、Edgeを閉じるように要素の確認を追加( ´∀` )





シーケンスを新たに追加して格納
で、Elseに

さらに、ちょっと正常終了のメッセージを誤っていたので

改修後のClose_Edge.xamlファイル全体としては、

ファイルをデバッグすると、

※まあこれだけだと、実は、確認メッセージなんかが出た時にうまく閉じれない可能性があるんだけど、自動実行専用のPCなはずなのに、確認メッセージまで必要な操作を手作業でやってブラウザを開きっぱなしにしてる方が悪いのでそこまではやらない。
👉どうせ想定外エラーでコケるから( ´∀` )
てか、そこまで考慮してたら、どんなセレクターが出てくるか全部は分からないのでキリがない
👉開いてるWEBサイトごとに動きが異なるので網羅出来ない
で、最後に今回Libraryフォルダに格納した、ふたつの.xamlファイルは他のロボットでも使うかもしれないので~~~


ここでポイント③:SourceTempleteとLibraryの違い
SourceTemplete:全ロボット共通で使う機能
Library:全ロボット共通ではないが、よく使う機能のみ
の違いだけ( ´∀` )つまり、手順としては
今後作る色んなロボットの機能の内、よく使いそうな.xamlファイルをLibraryフォルダに放り込んでおく
Libraryフォルダごと各ロボットのソースフォルダの中にコピーして追加
使う奴だけLibraryフォルダの中に残す
だけ~~~
ここでポイント④:ライブラリの.xamlファイルはConfigファイルに外出ししないの❓👀
ここまでの手順はあくまでも、
Library機能を作る例を見せてただけなので~
まあ、これも人や状況によりけりなんだけど、読み込むConfigファイルの中に必ず全てのキーが網羅出来てるとは限らない
👉もし盛り込めてないと、
余計なエラーの原因になる
Libraryフォルダから呼び出して、
ソースを改修し終わった後にやる方が良い
( ´∀` )
👉組み込み中に外出しまでやってたら、
何をしていたか分からなくなるんで~~~
内容としては以上。
ソース・リファクタリング:セレクターまで含めてConfigに外出し後
■Main.xaml👉今回引数のみインポート

■RobotMain.xaml👉今回改修あり

■ReadConfig.xaml👉今回改修なし

■Open_Edge.xaml👉今回新規

OpenEdgeConfig引数を追加した
■Close_Edge.xaml👉今回新規

CloseEdgeConfig引数を追加した
■ReadYouTube.xaml👉今回改修なし

これでアタッチの前まで説明したいことは
盛り込めた( ´∀` )はず
さてと、次回は、
アタッチから説明に入ってく💃
んだば続きは、また次回