【Blue Prism】書き込みステージが使えないときの対処法

# はじめに
Blue Prismを用いてWebブラウザなどの操作を自動化したいとき、書き込みステージを使うことがよくあります。しかし、書き込みステージを使ってもブラウザに反映されない場合があるので、そんなときの対処法を書いていこうと思います。

# どんなことが起きたのか
書き込みステージが使えない場合の一例をご紹介します。

### 前提条件
今回の動作環境です。同じ状況の人はこの記事の内容を参考にしてみてください。
* Blue Prismのバージョン：6.8.0
* ブラウザ：Google Chrome

### 自動化したい内容
今回、「[Yahoo乗換案内](https://transit.yahoo.co.jp/) で交通費の検索をする」という操作の自動化を試みました。

処理の大まかな流れは以下のようになっています。
1. Yahoo乗換案内を起動
2. 出発駅と到着駅をそれぞれ入力する
3. 検索ボタンを押す

### 作成したオブジェクト
上記の操作をBlue Prismのオブジェクトとして作成してみました。
赤い枠で囲んでいるところで書き込みの操作を行っています。

![スクリーンショット 2022-04-12 154440.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/062b235c-7d88-73a1-1b77-34951fda13c5.png)

このオブジェクトを実行してみます。
テキストボックスに出発駅と到着駅を入力する操作に書き込みステージを使っています。

テキストボックスの「駅、バス停、住所、施設」の上に文字が重なってしまっています。


![スクリーンショット 2022-04-12 153933.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/30057b14-4c87-e196-dfd8-11f0d10217bb.png)


このまま検索ボタンを押しても未入力のエラーが出てきてしまいます。

![スクリーンショット 2022-04-12 153953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/3a541909-333f-e28b-b5dd-e5c4ddf07b51.png)

これを解消するにはどうすればよいでしょうか。

# 解決策を考えてみよう
### 手動で入力するときの操作
オブジェクトを修正する前に、手動でどうやって入力していたか思い出してみましょう。

1. 出発駅をコピーする
2. ブラウザを一番手前に持ってくる
3. 出発駅のテキストボックスをクリックする
4. コピーした文字を貼り付ける

到着駅も、上の手順を繰り返すことで入力することができます。

そして最後に検索ボタンを押して交通費がいくらかチェックする、というのが一連の流れでした。

### オブジェクトのアクションに置き換えてみよう
手動の処理の流れが整理できたところで、これらをBlue Prismの操作に置き換えてみましょう。

| 手順 |  手動の操作  |  Blue Prismの操作  |
|  :----:  |  ----  | ---- |
|  1  |  出発駅をコピーする  |  Utility - Environment <br> Set Clipboard  |
|  2  |  ブラウザを一番手前に持ってくる  |  アプリケーションをアクティブ  |
|  3  |  出発駅のテキストボックスをクリックする  |  クリック  |
|  4  |  コピーした文字を貼り付ける  |  グローバルキー送信 <br> "^v"  |

到着駅の入力も同じ手順で行うことができますが、手順2についてはブラウザを一番手前に持ってくる操作のかわりに、ウィンドウをクリックする操作を入れることにします（理由は後述）。

ここまでできたら、実際にオブジェクトを修正してみましょう。

# オブジェクトを修正する
上の表をもとにして、オブジェクトを修正しました。

![スクリーンショット 2022-04-12 162323.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/73c98451-6d7a-839c-2c31-378af8d03b4f.png)
修正した部分のプロパティを確認してみましょう。
* 出発駅をクリップボードに貼り付け（アクションステージ）
手順1の操作をここで実装しています。出発駅の値（今回は新宿）をクリップボードに貼り付けています。
![スクリーンショット 2022-04-22 094824.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/9a93769c-4f5f-f59e-e6e1-bed207157ae5.png)

* 出発駅入力（操作ステージ）
手順2～4の操作を実装しています。グローバルキー送信のショートカットキーの値（今回は貼り付け）は、プロパティ画面下部の入力タブのテキストの項目に入力します。
![スクリーンショット 2022-04-22 094948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/f12f5066-81ea-b75d-278d-2ecdaf0045be.png)

* 到着駅入力（操作ステージ）
最初のアクションで、ウィンドウをクリックする操作（グローバルマウスクリック）を入れています。理由としては、出発駅入力のときにウィンドウがアクティブになっているので、ここでもう一度アクティブ化の操作を入れると非アクティブ状態になってしまってテキストボックスへの入力が失敗することがあるからです。
![スクリーンショット 2022-04-22 110020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/101c5d4b-fcb5-f7a2-7885-84a0efdb1c71.png)

これで実行してみましょう。

![スクリーンショット 2022-04-12 162743.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/7c03b239-e52d-b284-fd10-77e369231587.png)
![スクリーンショット 2022-04-12 164200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524963/354711d4-a014-86d3-1756-3138a27f2ed1.png)

ちゃんと検索結果が出てきました。

# まとめ
書き込みステージが使えないときの対処法についてまとめました。「クリップボードにコピーしてグローバルキー送信で貼り付ける」ことでテキストボックスに書き込むことができます。
一般に、自動化がうまくいかないときは以下の手順で考えるとうまくいくことが多いです。
ぜひ参考にしてみてください。
1. 手動の処理の流れを整理する
2. Blue Prismの操作に置き換える