2013-04-22 21 views
5

Trong mã được tạo, có một cách để chờ kiểm soát tồn tại sử dụng UITestControl.WaitForControlExist(waitTime);. Có cách nào để chờ kiểm soát không tồn tại? Cách tốt nhất tôi có thể nghĩ đến là tạo ra một phương pháp khuyến nông như thế này:Trong C# Giao diện người dùng được mã hóa có cách để chờ kiểm soát có thể nhấp được

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

Có cách nào tốt hơn để làm điều này? Ngoài ra tôi đang tìm cách để làm điều ngược lại.

Trả lời

3

Vậy điều gì WaitForControlExists thực sự không có gì để gọi WaitForControlPropertyEqual công cộng, một cái gì đó như:

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

helper của bạn có thể thay vì gọi:

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

Ngoài ra, như Kek chỉ ra, có một WaitForControlNotExist phương pháp công khai.

Lưu ý rằng tất cả dường như được sử dụng helper cùng (cũng công cộng):

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

helper này về cơ bản không một Thread.Sleep trên thread hiện nay, khá nhiều như bạn làm điều đó.

+0

Xin lỗi vì đã đặt câu hỏi cho bạn nhưng hữu ích vì câu trả lời này cho những gì tôi đã hỏi ban đầu không có thuộc tính có thể nhấp mà tôi biết vì vậy tôi không thể đợi được. – jgerstle

+0

Tôi sẽ nói để tìm trong hội đồng đó và xem cách tất cả các phương pháp này được thực hiện (sử dụng một công cụ phản xạ). Tất cả dường như chỉ theo cùng hướng chung của những gì bạn đã làm. –

1

Nếu bạn chỉ muốn chờ đợi một khoảng thời gian cụ, bạn có thể thêm vào thử nghiệm của bạn:

Playback.Wait(3000); 

với thời gian trong mili giây.

+0

Bạn có thể giải thích tại sao 'Playback.Wait (500);' sẽ được ưu tiên hơn 'Thread.Sleep (500);' là mã trong câu hỏi đã sử dụng chưa? – AdrianHHH

+1

Theo MSDN, Playback.Wait() cho phép bạn hủy phát lại trước khi kết thúc chờ trong khi ngủ có thể không hoặc ném ngoại lệ. http://msdn.microsoft.com/en-us/library/gg131072.aspx – knighter

0

Có một họ gồm WaitForControl...() phương pháp, bao gồm phương pháp WaitForControlNotExist().

Các tập hợp đầy đủ các Wait... phương pháp là:

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

Ngoài ra còn có các WaitForCondition()WaitForControlCondition() phương pháp có thể được sử dụng để chờ đợi cho điều kiện phức tạp hơn.

Các vấn đề liên quan