Browser.AttachTo <T>() вызывает прерывистое исключение "Тайм-аут во время работы Internet Explorer"

Шаг WatiN, который выполняется как часть процесса непрерывной интеграции, терпит неудачу при попытке присоединения к экземпляру браузера с перерывами. В настоящее время около 1 в 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:

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

}

Кто-нибудь знает что-то еще, что я могу сделать/проверить, чтобы добраться до сути этого раздражающего сообщения об ошибке?

Ответ 1

У меня были аналогичные проблемы в прошлом, и решение заключалось в том, чтобы просто повторно использовать одно и то же окно браузера за сеанс. Создайте окно браузера, когда выполняется первый тест, и используйте его для всех тестов, затем при необходимости завершите его, когда закончится тестовый сеанс. Очевидно, это зависит от того, какую тестовую упряжь вы используете, но она должна работать. Создание и уничтожение окон IE - это ресурсоемкая деятельность, поэтому лучше избегать ее, если это возможно.