2013-04-22 13 views
5

コード化されたUIでは、UITestControl.WaitForControlExist(waitTime);を使用してコントロールが存在するのを待つ方法があります。コントロールが存在しないのを待つ方法はありますか?C#コード化されたUIには、コントロールがクリック可能になるのを待つ方法があります。

public static bool WaitForControlClickable(this UITestControl control, int waitTime = 10000) 
    { 
     Point p; 
     Stopwatch stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
     while (stopwatch.ElapsedMilliseconds < waitTime) 
     { 
      if (control.TryGetClickablePoint(out p)) 
      { 
       return true; 
      } 
      Thread.Sleep(500); 
     } 
     return control.TryGetClickablePoint(out p); 
    } 

これを行うには良い方法があります: 私の考えることができる最高の方法は、このような拡張メソッドを作成するのですか?また、私は逆を行う方法を探しています。公共WaitForControlPropertyEqualを呼び出すことです

答えて

3

だから何WaitForControlExistsが実際に行うことは、何かのように:

return this.WaitForControlPropertyEqual(UITestControl.PropertyNames.Exists, true, timeout); 

あなたのヘルパーは代わりに呼び出すことができます。

public bool WaitForControlPropertyNotEqual(string propertyName, 
       object propertyValue, int millisecondsTimeout) 

ケッが指摘するようにまた、WaitForControlNotExistがありますパブリックメソッド。彼らはすべて同じヘルパー(公共)を使用しているように見えること

注:

public static bool WaitForCondition<T>(T conditionContext, Predicate<T> conditionEvaluator, int millisecondsTimeout) 

このヘルパーは、基本的にほとんどあなたがそれを行うよう、現在のスレッド上のThread.sleepを行います。

+0

申し訳ありませんが、私はもともと私が知っているクリック可能なプロパティはありませんので、私はそれを待つことはできませんが、この答えとして役立つと便利です。 – jgerstle

+0

私はそのアセンブリを見て、これらのメソッドがどのように実装されているかを見てみましょう(リフレクタツールを使用します)。それらはすべて、あなたがしたのと同じ一般的な方向を指しているようです。 –

1

あなただけの時間の特定の長さを待つしたい場合は、あなたのテストに追加することができます。

Playback.Wait(3000); 

ミリ秒単位の時間で。

+0

'Playback.Wait(500);'がThread.Sleep(500);より優先される理由を説明できますか?質問のコードが既に使用していますか? – AdrianHHH

+1

MSDNによれば、Playback.Wait()を使用すると、待機が終了する前に再生をキャンセルできますが、sleepは例外をスローしたりスローしたりすることができます。 http://msdn.microsoft.com/en-us/library/gg131072.aspx – knighter

0

WaitForControlNotExist()メソッドを含むWaitForControl...()メソッドのファミリがあります。

これらWait...方法のフルセットは、次のとおりです。

WaitForControlEnabled() 
WaitForControlExist() 
WaitForControlNotExist() 
WaitForControlPropertyEqual() 
WaitForControlPropertyNotEqual() 
WaitForControlReady() 

より複雑な条件を待つために使用することができWaitForCondition()WaitForControlCondition()方法もあります。

関連する問題