在C#Coded UI中有一种等待控件可点击的方法

时间:2013-04-22 13:38:30

标签: c# coded-ui-tests

在编码的ui中,有一种方法可以使用UITestControl.WaitForControlExist(waitTime);等待控件存在。有没有办法等待控件不存在? 我能想到的最好的方法是创建一个像这样的扩展方法:

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

有更好的方法吗?此外,我正在寻找一种相反的方法。

3 个答案:

答案 0 :(得分:3)

所以WaitForControlExists实际上做的是调用公共WaitForControlPropertyEqual,如:

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

您的帮助者可以致电:

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

另外,正如Kek指出的那样,有一个WaitForControlNotExist公共方法。

请注意,它们似乎都使用相同的帮助程序(也是公共的):

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

这个帮助程序基本上在当前线程上执行Thread.Sleep,就像你这样做。

答案 1 :(得分:1)

如果您只想等待一段特定的时间,可以添加到测试中:

Playback.Wait(3000);

以毫秒为单位的时间。

答案 2 :(得分:0)

有一系列WaitForControl...()方法,包括WaitForControlNotExist()方法。

这些Wait...方法的全套方法是:

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

还有WaitForCondition()WaitForControlCondition()方法可用于等待更复杂的条件。