如何在Teststack White中实现动态超时? 防爆。我试图在网络浏览器上的回发事件后找到一个元素。因此在元素加载或页面可能超时之前会有延迟。 对于这两种情况,使用Thread.Sleep的静态超时有效但如何实现动态超时接口,如果在超时上限之前检测到元素,或者在达到超时上限时超时,将继续执行。
由于
答案 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)
{
...
}
}
答案 2 :(得分:0)
如果您想在本地使用超时,请查看
using (CoreAppXmlConfiguration.Instance.ApplyTemporarySetting(c => c.BusyTimeOut= 1500))
{
// your code here
}
希望这有帮助。
里克多维