5

在编码的 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);
    }

有没有更好的方法来做到这一点?我也在寻找一种相反的方法。

4

3 回答 3

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 ,就像你做的一样。

于 2013-04-22T13:47:18.533 回答
2

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

Playback.Wait(3000);

以毫秒为单位的时间。

于 2014-03-04T23:04:46.650 回答
1

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

这些Wait...方法的完整集是:

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

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

于 2014-03-05T09:26:01.470 回答