如何在Teststack White中实现动态超时?

时间:2014-10-13 20:46:09

标签: ui-automation

如何在Teststack White中实现动态超时? 防爆。我试图在网络浏览器上的回发事件后找到一个元素。因此在元素加载或页面可能超时之前会有延迟。 对于这两种情况,使用Thread.Sleep的静态超时有效但如何实现动态超时接口,如果在超时上限之前检测到元素,或者在达到超时上限时超时,将继续执行。

由于

3 个答案:

答案 0 :(得分:2)

您可以实现扩展方法来获取元素并在其中放置等待条件。

public static T GetWithWait<T>(this Window window, SearchCriteria searchCriteria, int timeout = 30) where T : UIItem
{
    T result = null;
    for (int i = 0; i < timeout; i++)
    {
        result = window.Get<T>(searchCriteria);
        if (result != null)
        {
            return result;
        }
        Thread.Sleep(TimeSpan.FromSeconds(1));
    }
    return result;
}

从Window对象中,您可以使用SearchCriteria调用此方法,通常用于查找元素。

答案 1 :(得分:1)

  

White努力消除对Thread.Sleep的任何需求,并在测试程序中重试。因此,如果您发现自己在程序中执行了这些操作,请使用以下任何一个适用的选项。如果您找不到,请提出问题。

-

  

有些情况下,上述两种策略都不够,因此white提供了自己的等待机制。在此测试程序中等待直到某个条件匹配。一旦条件匹配,它就会返回。有最长的等待时间。可以通过设置BusyTimeout属性来配置此持续时间。

-

  

挂钩自定义等待的步骤:   实现接口White.Core.Configuration.IWaitHook。   只要您的测试需要,就可以在其中实现WaitFor方法等待。 White在UIItemContainer中传递(大部分时间这只是窗口)对象,以提供调用的上下文。例如你可以等到你能在这个容器中找到一个UI项目。通过设置CoreAppXmlConfiguration.Instance.AdditionalWaitHook值来设置等待挂钩

public class CustomWait : IWaitHook
{
    public CustomWait()
    {
        CoreAppXmlConfiguration.Instance.AdditionalWaitHook = this;
    }

    // Implementation of the IWaitHook interface
    public void WaitFor(UIItemContainer uiItemContainer)
    {
        ...
    }
}

TestStack.White - Waiting

答案 2 :(得分:0)

如果您想在本地使用超时,请查看

using (CoreAppXmlConfiguration.Instance.ApplyTemporarySetting(c => c.BusyTimeOut= 1500))
{
   // your code here
}

希望这有帮助。

里克多维