winactorの使い方⑫文字列送信

WinActorの使い方⑫文字列送信

文字列送信について下記の通り解説します。

  1. 文字列送信の基本的使い方

  2. 文字列送信リターンキー(エンター)とは

  3. 文字列送信 送信結果を検証

  4. 文字列送信 改行

  5. 文字列設定との違い

  6. 遭遇したエラーパターン

1.文字列送信の基本的使い方


システムに文字列入力する方法として04_自動記録アクション→01_デバッグ→文字列設定があります。
文字列設定はシステムのHTML等の構造を解析して文字列を入力する箇所を特定していますが、
文字列送信につきましてはそのようなことはありません。
入力したい箇所にマウスカーソルを合わせるだけです。

そのため文字列設定を用いることができないシステムに文字列を入力したい場合に文字列送信を用いてください。

具体的な操作方法として
下図の出発ボックスに”東京”を入力させたいとします。



文字列送信を用いる場合は、下図のようにカーソルをあわせる必要があります。



そして以下のように設定した文字列送信を実行します。
矢印のアプリケーション選択ボタンでウィンドウを選択します。
送信文字列に東京を入力します。




実行すると・・・
無事に東京と入力されました!



ですので文字列送信を用いる前には必ずエミュレーション等でキーボード操作をして入力したい箇所にカーソルを合わせる必要があります。

2.文字列送信リターンキー(エンター)とは


基本的にはチェックをつける必要はございません。
ただし、稀に送信した文字列が未確定状態になる場合があります。
下図のような状態です。
以下のように確定されない状態になる場合にチェックを入れましょう。


3.文字列送信 送信結果を検証


文字列送信実行後に、送信した文字列と実際に入力された文字
列を比較し、正しく入力がされたかを検証するものです。
正しく入力が出来なかった場合、下記の通りメッセージが出現します。
このようにエラーを出現させることができれば例外処理やウィンドウ状態待機で対応できます。
※正しく入力できないことは時々起こります。

4.文字列送信 改行


文字列送信で改行して入力したい場合があるかもしれません。
下図のようにです。


このような場合もリターンキー送信にチェックを入れて
文字列送信を並べて使いましょう!



最初の文字列送信は下記のように設定します。
リターンキー送信にチェックを入れます。



2つ目は下記の通りにします。

このようにして改行入力を可能にできます。

5.文字列設定との違い


文字列送信と文字列設定との違いは速度です。
文字列送信は非常に遅いです。
更にエラーも起こりやすいため、文字列設定のご利用をお勧めしています。
文字列設定も弱点はあります。
文字列設定の場合はソースコードを解析してターゲットを選択しています。
そのため詳細にてtag index しか取得できないようだと安定しないことが多いです。
この辺は状況を見ながらシナリオ作成するしかありません。
yahoo路線でのシナリオを実際に作成しておりますが、
正直安定稼働させるのに苦労しました。

まず文字列送信ではエラーが頻発します。
”東京”と入力したいのに”東”しか入らないなどがかなりの確率でおきました。
※yahoo路線での現象です。
文字列設定という選択肢となるのですが
id属性が出発ボックス到着ボックス共にquery_inputと重複しているというルールに従わない作り。
name属性がfromとtoでしたのでこちらで設定しました。
しかしながら以下のように入力されます。


うん?ぼやけて入力されています。
画質が悪いわけではございません。
この状態で検索ボタンを押下すると以下のようにエラーとなります。


不可解な現象です。
yahoo路線のつくりの問題としか現時点では説明ができません。
そのため以下のようなシナリオとしています。
1.画像マッチングにてカーソルを合わせます。
2.クリップボードへ値を設定します。
3.エミュレーションにてCtrl + Vで貼り付けす。
もし文字列設定で対応できましたら情報をお待ちしております。

6.遭遇したエラーパターン


私が遭遇したエラーパターンをご紹介します。
あるシステムに個人情報を入力するシナリオを作成していた時のお話です。

名前、住所、年齢等の入力ボックスがあります。
文字列送信を用いてシステム入力するシナリオを作成していましたが
何故か年齢だけは入力されないのです。
システムをよく調べてみると年齢の入力ボックスは数字しか入力できない仕様でした。
Aキー、Sキー、Dキーとかは入力できない仕様になっていたのです。

いや、文字列送信で入力を試みているのは値⇒30となっており数字のはず!
としばらく悩みました。
文字列送信・・・・そうか!文字列として30を送信しているのです。
コンピュータは文字列と数字を明確に区別します。
30は人から見ると数字ですが、
コンピュータでは数字と文字列の2パターンが存在します。
文字列で認識するパターンでは30+30=3030なのです。
数字では30+30=60になります。

ノードの文字列送信では値⇒30であろうが変数に30を格納しようが
文字列として扱うため、システムの仕様で入力されないという事態になってしまったのです。
こういう場合、エミュレーション等別のモードを利用して入力するしか手はありません。


本記事を執筆するにあたって参考にした書籍になります。
良本です。