【UiPath】Edge（IEモード）で利用しているWebサイトでのダウンロード処理の自動化方法

# １．はじめに
　社内システムのWebサイトによっては最新のEdgeやChromeで動作保証や動作ができないなどの都合により、「EdgeのIEモード」を利用している場面があるかと思います。RPAを利用した自動化しようとした場合に操作に苦戦する場合があり、その際の対処方法をご紹介します。特にWindows10とWindows11でダウンロードダイアログの表示動作が異なるため、その点に着目してご紹介します。
　具体的なユースケースとしては、以下に示す[UiPath Demo サイト](https://www.expense-demo.com/)から「サンプルのダウンロード」ボタンをクリックし、ファイルダウンロードを行い、名前を付けて保存するというケースを想定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/b15c76c2-f1b1-0ec1-9920-581be16a17d7.png)

# ２．環境情報
利用する環境は以下の通りとなります。
| ソフトウェア名 | バージョン情報 | その他 |
| :--- | :--- | :--- |
| OS | Windows10 および Windows11 |  |
| UiPath Studio | 22.10.5 | |
| UiPath.UIAutomation.Activities | 22.10.5 | |
| Webブラウザ | Egde（IEモード） | 設定より「ダウンロード時の動作を毎回確認する」を有効化 |
| Webサイト | https://www.expense-demo.com/ | |

# ３．Windows10の場合における対応方法
　「サンプルのダウンロード」ボタンをクリックすると以下の画面のように別のウィンドウダイアログが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/5fc406fa-fca4-a6c4-3cf8-be1138a79c46.png)

### 直面する問題
　「名前を付けて保存」ボタンを操作しようと、Edgeブラウザの「アプリケーション/ブラウザを使用」アクティビティ内で「クリック」アクティビティを利用しようとした場合、以下のようなダイアログメッセージ「指定した要素は対象のアプリケーション/ブラウザーに属していません。」が表示され、操作ができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/10a62084-f2ba-6ad6-72c4-de04fea89617.png)

### 対処方法
　今回の場合、「ブラウザーを使用」内に新たに「アプリケーション/ブラウザを使用」アクティビティを配置し、ブラウザ上に表示されたウィンドウはダイアログを「自動化するアプリケーション」に指定すことで対処することができます。
ワークフローは以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/94f0a2f4-c83e-cb7c-48f6-d36fc21932fb.png)
　大抵の場合、ブラウザから起動されたウィンドウは「アプリケーション/ブラウザを使用」アクティビティのプロパティにあるオプション「ウィンドウ アタッチモード」が「アプリケーションインスタンス」となっていれば、別の「アプリケーション/ブラウザを使用」を配置する必要はありません。（既定値は「アプリケーションインスタンス」）
　一方で、同オプション設定で「単一ウインドウ」となっている場合には同じような操作がどの画面でも必要となります。
　さらに、この後表示される「名前を付けて保存」ダイアログ画面の「名前を付けて保存」ボタンは先ほど配置したクリックアクティビティと同様の「アプリケーション/ブラウザを使用」アクティビティ内に配置することで操作ができます。

### 考察
　アプリケーションパスを見ると、「名前を付けて保存」ダイアログ画面はIEに属していることがわかります。このように、別のアプリケーションによって起動されているウィンドウは操作ができない旨のメッセージが表示されることがあるため、「アプリケーション/ブラウザを使用」アクティビティを配置して、対処をしていきましょう。

### ワークフロー全体像
　ワークフローの全体像は以下の通りとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/c3ca6b2d-81c9-5e5a-b423-3e85aeb8c174.png)

# ４．Windows11の場合における対応方法
　「サンプルのダウンロード」ボタンをクリックすると以下の画面下部にダイアログが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/de12fc3d-ffac-98f7-a6cc-8d2d29e3974b.png)

### 直面する問題
　「名前を付けて保存」ボタンを操作しようと、Edgeブラウザの「アプリケーション/ブラウザを使用」アクティビティ内で「クリック」アクティビティを利用しようとした場合、以下のようなダイアログメッセージ「指定した要素は対象のアプリケーション/ブラウザーに属していません。」が表示され、操作ができません。
　なお、「名前を付けて保存」を表示するために、保存ボタン横の▼ボタンは操作することは可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/10a62084-f2ba-6ad6-72c4-de04fea89617.png)

### 対処方法
　「名前を付けて保存」ボタンは、Windows10と同様に「ブラウザーを使用」内に新たに「アプリケーション/ブラウザを使用」アクティビティを配置して対処しようとしますが、ウィンドウが常時表示されるものではないため、エラーとなってしまいます。そこで、「ブラウザーを使用」内に「キーボードショートカット」アクティビティを利用し、「名前を付けて保存」ボタンのショートカットである「A」キーを操作することで、動作を実現します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/1d80657a-9d17-0d1d-30c3-da737dc31dda.png)

　さらに、「名前を付けて保存」ダイアログ画面も「指定した要素は対象のアプリケーション/ブラウザーに属していません。」が表示され、操作ができないため、「ブラウザーを使用」内に新たに「アプリケーション/ブラウザを使用」アクティビティを配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/573124ab-5784-e77e-8528-d9f6cd273846.png)

### 考察
　Windows10のときと同様に、「名前を付けて保存」ダイアログ画面はIEに属していることがわかります。また、先ほど「キーボードショートカット」アクティビティにて操作した「名前を付けて保存」ボタンもIEに属している画面となります。このように、別のアプリケーションによって起動されているウィンドウは操作ができない旨のメッセージが表示されることがあるため、「アプリケーション/ブラウザを使用」アクティビティを配置して、対処をしていきましょう。

### ワークフロー全体像
　ワークフローの全体像は以下の通りとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/7e408206-6acf-7be8-8c00-704c3dd84b71.png)

# ５．参考
　ダウンロードの取得先が固定の場所や規定値Downloads（ダウンロード）フォルダとしている場合は、以下のように「ダウンロードを待機」アクティビティを利用することを推奨致します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/97455318-daff-3523-d49e-19a71e9ad0c3.png)
　本アクティビティ内には、ファイルダウンロード操作となる「クリック」アクティビティを配置します。基本的にはファイルダウンロード操作に該当するアクティビティ以外を配置しないでください。そのため、先ほどのワークフローでは「保存」ボタンを同アクティビティ内に入れていませんが、基本的には同じようにすることを推奨致します。
　また、本アクティビティを利用することで、ダウンロード完了まで待機されます。また、ダウンロードしたファイル情報を変数（例ではdownloadFIleInfoとしています）に格納することができます。
　同変数はFileInfoクラス型の変数となるため、ファイル名のフルパスを取得する場合は以下のようにする必要があります。
　downloadFileInfo.FullName
　C:\Users\XXXX\Downloads\data.xlsx
なお、Nameとするとファイル名のみ（data.xlsx）が取得されてしまいますので、注意してください。