2013-04-22 8 views
5

Kodlanmış kullanıcı arabiriminde UITestControl.WaitForControlExist(waitTime); kullanarak bir kontrolün olmasını beklemenin bir yolu var. Bir kontrolün var olmamasını beklemenin bir yolu var mı?C# Kodlu UI'de bir kontrolün tıklanabilir olmasını beklemenin bir yolu var.

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); 
    } 

Bunu yapmanın daha iyi bir yolu var mı: düşünebildiğim en iyi yolu bu gibi bir uzantı yöntemi oluşturmaktır? Ayrıca tam tersini yapmak için bir yol arıyorum.

cevap

3

Yani aslında yapar WaitForControlExists neyi kamu WaitForControlPropertyEqual aramaktır, gibi bir şey:

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

Yardımcınız yerine çağırabilirsiniz:

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

Ayrıca Kek işaret ettiği gibi, bir WaitForControlNotExist var kamu yöntemi. hepsi (ayrıca kamu) aynı yardımcı kullanarak gibi görünüyor

Not:

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

bu yardımcı esasen bunu yaparken oldukça fazla akım parçacığı üzerinde bir Thread.Sleep yapar.

+0

Soruyu sorduğum için üzgünüm ama asıl istediklerim için bu cevap kadar yararlı olduğunu bildiğim tıklanabilir bir özellik yok, bu yüzden bekleyemem. – jgerstle

+0

Bu derleme bakmak ve tüm bu yöntemlerin nasıl uygulandığını görmek isterim (bir reflektör aracı kullanın). Hepsi yaptığınız şeyin genel genel yönünü gösteriyor gibi görünüyor. –

1

sadece belirli bir zaman uzunluğu için beklemek istersen, sen teste ekleyebilirsiniz:

Playback.Wait(3000); 

milisaniye cinsinden zaman.

+0

'Thread.leep (500) 'üzerinden' Playback.Wait (500) 'seçeneğinin neden kullanıldığını açıklayabilir misiniz? – AdrianHHH

+1

MSDN'e göre, Playback.Wait(), beklemenin bitiminden önce oynatmayı iptal etmenize izin verir, oysa uykunuz istisna olmayabilir veya atamaz. http://msdn.microsoft.com/en-us/library/gg131072.aspx – knighter

0

WaitForControlNotExist() yöntemi de dahil olmak üzere WaitForControl...() yöntemlerinin bir ailesi vardır.

bu Wait... yöntemlerin tam kümesidir:

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

daha karmaşık koşullar beklemek için kullanılabilir WaitForCondition() ve WaitForControlCondition() yöntemler de vardır.