LoginSignup
13
8

More than 3 years have passed since last update.

[Ranorex] tips

Last updated at Posted at 2019-03-22

Background

RanorexはWebのE2Eテスト自動化に優れている。
自動化がむつかしい部分の実装や、保守性等を考えての実装方法のtipsを列挙する

1. 変数系

変数の変数化

処理の中で、複数の変数に対してルーチン処理をさせたい場合がある
配列を使う手段もあるが、Ranorexの場合、外からのデータソースの授受は配列が使えない。

対応策

Reflectionを活用する

例えば 変数 local_aite_uma1_flag ~ local_aite_uma16_flag に対してルーチン処理を行いたい場合
1. 数字の部分を変数化し、1-16でループさせる
2. 変数名を "GetType().GetProperty" で作成する
3. 作成した変数の変数の値を取得する場合、"GetValue"で取得
4. 作成した変数の変数に値を代入する場合、"SetValue"で設定

2. 文字入力系

Key Sequence 文字入力

文字入力を行う一つの方法として、"Key Sequence"がある。
ただ、これを使うときには注意点がある。
windows上の文字入力モードに依存する点である。

課題

たとえば、英数文字を自動化で入力する処理があるとする。
ただ、IMEの日本語入力モードになっていると、日本語変換しようとした入力になってしまう。
そのため、実行時に入力モードを意識する必要がある。

対応策

  1. 入力モードのオンとオフをホットキーに割り当てる  今回の例では、"USモードに切り替える"を"Ctrl+0"とする


2. Key Sequenceの実施前に、"Key Shortcut"アクションを追加し、上記で作成したshort cutを設定する

3. 値

画面上の値を正規表現等で取得

課題

文字列から一部値をとりたいことがある。
例えば、カンマ付き数字列から数字を取りたい場合等

対応策

  1. "Get Value"で取得する文字列から値をとるアクションを定義する
  2. 上記アクションを"ユーザーコードに変換"する
  3. 作成したユーザーコード内で、C#で文字列操作の関数で希望の文字列を取得する

参考
C#で文字列操作するによく使う関数は以下のとおり

  • Regex , Match を用いた正規表現
  • Replace を用いた 文字変換(削除)

select のsetvalueの値指定

課題

Ranorexでselect-boxで値を選択する処理をcaptureすると、下図のようにactionがとられる

Action Set value
Name Tag Value
Value select HTML tagのoptionの値
(今回の例では 三連複は"8"である)

この場合、この設定する値を変数化し、データドリブン等で値を設定する場合、optionの値を入れる必要がある。(今回の例では、単勝=1, 複勝=2, 三連複=8 etc)
こうなると、データドリブンのデータを用意するとき、そのoptionの値を入れる必要があり、mapping tableを持つ必要がでてくる。

解決

以下のステップで、select-boxで表示されている文字列を選べるようにする

  1. SPYでoptionのオブジェクトをrepositoryとして取る   この時、図のように WebElementとしてinnertextでとる
  2. 1で取得したオブジェクトのinnertextに対する値を変数にする
  3. 1で取得したオブジェクトを"Invoke action" の "Select"でActionに追加する

4. 処理分岐

要素が表示されているときに正しいと判断する

課題

CSSでコンテンツの表示の制御を行っている場合、画面上存在しないが
要素を認識する場合がある。
これは、RanorexがHTMLベースで要素を認識しているためで、画面の表示の確認をdefaultしていないからである(と思う)

要素がページ上表示され、かつ認識しているケース

要素がページ上表示されてないが、認識しているケース

対応策

Xpath に @Visible='True' を定義する。
このoptionは表示の有無を確認している

5. 動作安定性

WebがLoad終わってから自動化処理を進める

Ranorexは、ページ遷移が完全に終わるのを待たない。
次のアクションの実行に入るが、その時にそのオブジェクトが出現するのを待つ。
そのため、ページがロードしてから次の処理に進んでいるように見える。

課題

CSS等でコンテンツレイアウトを定義している場合。
ページ表示にバナー等順次読み込み、その次にレイアウトを組み立てていくページがある。
この場合、バナーの配置がロード中に変わってしまう。
Ranorexは、バナーが出現したらマウスクリック等を行おうとするが、レイアウトが変わってしまうので
失敗してしまう可能性がある。

対応策

ページ遷移が発生した後、 WaitForDocumentLoaded 関数を読み出す
これはコンテンツが読み終わるまで(timeout指定可能)待つ

validateするときのrepositoryの存在チェック

ValidateのAttributeContainを実施するとき、そのrepositoryが完全な形(LOADが完全に終わり表示されている)になっていないと、失敗するときがある
以下がそのエラーの例

Module execution was aborted because a validation step has failed. 
Attribute 'InnerText' of element for item 'XXXXX' can not be evaluated (element is not valid). 

これは、画面が表示され、そのrepositoryのattributeを取りに行くが、完全に表示されてないため
失敗する
そのため、これが発生する場合、その直前にrepositoryが存在することを確認する処理waitForなどを使う

ex. before

ex. after

repositoryをclickするなどの処理は、そのrepositoryの存在のチェック(timeoutあり)してから進むので、上記問題は考えなくていいが、validationの場合、存在する前提で動いていると思われるので、このようなエラーが起きると思われる

エラー時の処理

Ranorexはエラーが発生したとき、それ以降どのようにふるまうかを設定することができる

  • 1. 次の繰り返しに移動して続行
  • 2. 次のテストケースに移動して続行 (default)
  • 3. 次の親テストケースに移動して続行
  • 4. 停止

各レコードモジュールで失敗したときに、どうなると最適化を考えて設定する。

例1. ランダムのデータを大量に作成したい場合
繰り返し処理でデータを大量に作成したく、かつ一部失敗しても問題ない場合を想定する。
その場合、1回のループで失敗しても、次のループで改めて実行を繰り返しても問題はない。
その場合の選択肢として、"1. 次の繰り返しに移動して続行"を選ぶとよい

例2. 毎日チェックするタスク(CI)の場合
定期的な動作確認として使い場合を想定する。
その場合、早くエラーを検知通知することが求められる。
その場合、失敗した時点で以降の処理を中断し "4. 停止" 、Jenkinsはエラーを返すのがベター。
原因解析後、再実施させればよい

例3. 失敗しても後処理が必要な場合
スマートフォルダを利用し、最後のスマートフォルダにエラーになったとしても後処理をさせる必要がある場合を想定する。
その場合、"3. 次の親テストケースに移動して続行" を選ぶとよい。

データソース肥大化によるパフォーマンス低下

データソースでエクセルを多く使っていると、Ranorex Studio自体のレスポンスが低下する
その回避策は以下の通りである

”データの自動ロードの無効化”

[データソースの管理]画面 にて  [データの自動ロード]のチェックボックスをオフ

6. Mobile

Timeout

appiumをつかった、real device SP web、Native Appをテストするとき、起動時に時間がかかる
そのため、タイムアウトすることがよく発生する
そのタイムアウトを設定にて長めに設定する

Android App install できない

APKをInstrumentするときに失敗するときがある

この時、以下の方法で回避することができる

APKツール 最新化

https://bitbucket.org/iBotPeaches/apktool/downloads/
ここから、最新のAPKをdownloadする
※ただし、Ranorex versionとの相性があるかもしれない
Ranorex 8.3.1 の場合 APK 2.4.0

C:\Program Files (x86)\Ranorex 8.3\Bin\RxEnv\Android\tools\apkTool
ここのapktool.jarと差し替える

Instrumentation flagsに以下オプション(APKファイルの参照メソッド総数の上限設定)を定義する

 -static -multidex -smali_redist

APK インストルメントオプションの変更

以下OPTIONの無効化をする

  • "Full image comparison"

7. Report

compressed log

実行結果のreportを1ファイルに、圧縮する。
ほかのメンバーと結果を共有するとき、これをONにしてzlogを使うと便利

8. browser open & close

Browserのclose applicationは closeWindowsを使う

close applicationの killProcessは便利なところがある。
ブラウザの複数タブが立ち上がっている場合、タブの数を気にせずに終了させることができる
しかし、それをつかうと、次回起動時警告が出るときがある。
chromeであれば、前回正しく終了できませんでした と。
このアラートがでると、やっかいである。
次回起動時に、その周辺にあるボタンをクリックできないから。
そのため、基本的には closeWindowsを使う。

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8