作为连续集成构建过程的一部分运行的WATIN步骤在尝试间歇性地连接到浏览器实例时失败了。目前大约有5次。
Browser.AttachTo<IE>(Find.ByTitle("Title of Popup"));
带有以下错误:
WatiN.Core.Exceptions.TimeoutException: Timeout while Internet Explorer busy
at WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.ThrowTimeOutException(Exception lastException, String message)
at WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.HandleTimeOut()
at WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.Try[T](DoFunc`1 func)
at WatiN.Core.WaitForCompleteBase.WaitUntil(DoFunc`1 waitWhile, BuildTimeOutExceptionMessage exceptionMessage)
at WatiN.Core.Native.InternetExplorer.IEWaitForComplete.WaitUntilNotNull(DoFunc`1 func, BuildTimeOutExceptionMessage exceptionMessage)
at WatiN.Core.Native.InternetExplorer.IEWaitForComplete.WaitWhileIEBusy(IWebBrowser2 ie)
at WatiN.Core.Native.InternetExplorer.IEWaitForComplete.WaitForCompleteOrTimeout()
at WatiN.Core.WaitForCompleteBase.DoWait()
at WatiN.Core.Native.InternetExplorer.AttachToIeHelper.FinishInitializationAndWaitForComplete(IE ie, SimpleTimer timer, Boolean waitForComplete)
at WatiN.Core.Native.InternetExplorer.AttachToIeHelper.Find(Constraint findBy, Int32 timeout, Boolean waitForComplete)
at WatiN.Core.Browser.AttachTo[T](Constraint constraint)
我已经完成了以前帖子中建议的所有明显的事情:
即。在运行WATIN步骤之前杀死所有Internet Explorer流程:
Process.GetProcessesByName("IEXPLORE").ToList().ForEach(p => p.Kill());
在进行WATIN步骤之前,请增加超时:
var timeout = 60;
Settings.AttachToBrowserTimeOut = timeout;
Settings.WaitForCompleteTimeOut = timeout;
Settings.WaitUntilExistsTimeOut = timeout;
在以下代码块中,每个watin步骤都作为操作传递:
public void UseAndCloseBrowser(Action<Browser> action, Browser browser)
{
try
{
action(browser);
browser.WaitForComplete();
}
finally
{
Log(Level.Info, "Attempting to close browser {0}", browser.Title);
browser.Close();
browser.Dispose();
}
}
有人知道我可以/检查的其他事情以达到此烦人的错误消息的底部吗?
我过去遇到了类似的问题,解决方案是每次会话简单地重复使用相同的浏览器窗口。当第一个测试执行并将其用于所有测试时,请创建一个浏览器窗口,然后在测试会话结束时选择将其关闭。显然,这取决于您使用的测试安全带,但应该起作用。创建和破坏IE Windows是一项资源密集型活动,因此最好避免使用。