2016-04-15 70 views
0

私の現在のスクリプトでは、Ranorexは約10分待っています(いくつかのコンティンジェンシー時間、通常はにはが必要ですが、遅いマシンでは1日だけ実行されます)。 。それはテストされたアプリケーション、のようなので、「完了」単語にアプリの変更のタイトルでテキストが変更されるまでRanorexを待ちますか?

Application title

をだから私は思っていたが、Ranorexがするまで待たせるのいずれかの方法でありますこのテキストはdoneに変更されますか?おそらく、それを待ってから、10または30秒ごとにそれを確認してから、再度テキストをチェックしますか?

私の最初のアイデアは何とかこのタイトルのテキストをどうにかしてwhileループを持つユーザーコードを作成することでしたが、これをどうやってやっていくのかわかりません。

+0

おそらく 'TextChanged'イベントを使用して、フラグをtrueに切り替えてRanorexに続行するように指示します。 –

答えて

2

あなたの初期の考えはまあまあです。

これを処理するには、if/else文またはwhileループを作成します。

基本的には、「完了」が表示されているテキストオブジェクトをリポジトリに追加するだけです。 (この例の場合、我々はテキスト値のための2つの状態を持って言うことができます - 「待って」と「完了」)

そして、私は、次のUSERCODEメソッドを実装し、テキストの変更を処理するために:

public void WaitForTextChange() 
{ 
    if (repo.Dom.TextObject.InnerText == "Wait") 
    { 
     Delay.Duration(30000); // Waits for 30 seconds 
     WaitForTextChange(); 
    } else { 
     // Continue with test 
     Report.Info("State changed to 'Done'"); 
    } 
} 

基本的にあれば"else"ステートメントに達すると、ループはエスケープされます。何を行うことができますが、カウンタが例えば20に達した場合にフラグとカウンタを追加し、テストに不合格である

も(これはテストは約10分を走ったことを意味する)

+0

Done状態に決して到達しないと、無限ループに終わるので、最大再試行回数を追加することをお勧めします。または、このコードを変更して、定期的なrepeat/untilループ構造を使用してください。これはプログラマー以外の人にとっては理解しやすいものです。 – Sup3rHugh

+1

答えを完全に読むと、既にそこに記載されていることがわかります。 – Martin

2

ここではサンプルですあなたが検証する必要があるattibuteの名前で

Dim retries as Integer = 30 
Do 
    Report.Info(String.Format("Waiting for expected value ({0})", retries)) 
    retries -= 1 
    'Waiting 1 second 
    Threading.Thread.Sleep(1000) 
Loop Until String.Equals(repo.Item.Element.GetAttributeValueText("Text"), "ExpectedValue") OrElse retries > 0 

if retries <= 0 Then 
    Throw New RanorexException("Expected value not reached!") 
Else 
    Report.Info("Actual value is as expected.") 
End If 

は(GetAttributeValueTextで)「テキスト」属性を置き換えます。我々は(無限ループを避けるために)ここで使用したコード構築物は、(申し訳ありませんそのVB.NETで)の値を検証します。スパイを使用して属性名を識別します。

希望すると便利です。

1

何かをコーディングする必要はありません。

  1. それは記録モジュールで
  2. 「完了」されている場合、オブジェクトのみ、使用が「存在する」「を待ち」とリポジトリ・オブジェクト
  3. 設定を選択し、アクションを追加する見つけることができるようにtext = 'done'を追加します。タイムアウト値を最大値に設定します(例では15分) - >テキストが「完了」に変更された場合、すぐに処理が続行されます - >タイムアウト内にテキストが変更されない場合は、 エラーメッセージ。私は1つから別のステータスが変更されるまで待たなければならないと、私はこの方法が最も効果的であることが判明し、私のプロジェクトで
+0

アイテムがタイムアウト期間中に見つからない場合は、除外がスローされます。それを捕まえるか、WaitForExists機能の "ContinueOnFail"パラメーターを指定する必要があります。 – Martin

+0

申し訳ありませんが、 "ExceptionOnFail" – Martin

+0

このソリューションは良いですが、Web要素をテストする場合、Exist文に問題がある可能性があります。一部のアプリケーションでは、それらは常に存在します(要素は関連性がない/該当する場合は隠されています)。 – Sup3rHugh

1

、それはコードを必要としない:

  1. 使用のスパイをし、何を、この「完了見つけます(存在し、希望する時間を設定します)
  2. アイテムのパスを変更するには、@ visible = 'true'または@textのいずれかを追加します。 = '完了'
//要素[@たAutomationID =「TextRunRoundStatus」と=「プレイ」@​​テキスト]

この項目は、次に続ける存在するようになるまでRanorexが待機する:私の例では

、リポジトリ項目は次のようになります。

関連する問題