WatiN Dispose () очень медленно - PullRequest
       15

WatiN Dispose () очень медленно

12 голосов
/ 03 августа 2009

Мои тесты WatiN внезапно стали ОЧЕНЬ медленными при удалении объекта Internet Explorer.

Вот мои настройки ...

* Windows 7 (Evaluation Build 7100)
* Internet Explorer 8 (Version 8.0.7100.0)
* WatiN (Version 2.0.10.928)

Это странно, потому что тесты работали нормально неделю назад или около того. Я думаю, что это последние обновления MS или что-то.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

У меня были проблемы с медленным закрытием IE (или никогда), но после выполнения следующих действий у меня возникло ноль проблем:

My setup:
*IE 9
*Windows 7
*Watin 2.1
*Visual Studio 10 SP1, using Microsoft.VisualStudio.TestTools.UnitTesting
  1. Скорее, чем шаблон, описанный в Mikecito's ссылки, я использую версию BrowserStaticInstanceHelper, описанную Jeroen van Menen, герой Watin, здесь . Это обеспечивает способ обнуления и прикрепить к конкретному окну браузера.
  2. Использование этой стратегии дает бонус при запуске только одного IE для нескольких методов тестирования и нескольких классов тестирования. И, когда все тесты заканчиваются, IE закрывается в течение 1 или 2 секунд.

Последний выпуск:

Поскольку у меня есть несколько TestMethods и TestClasses, я хотел поместить IE.Close () в метод AssemblyCleanup (). Из-за проблем с многопоточностью MSTest мне пришлось вызывать close () следующим образом:

[AssemblyCleanup()]
public static void CleanupAllTests()
{
    var thread = new Thread(() =>
    {
        IE.Close();
    });
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();
}

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

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

0 голосов
/ 06 августа 2013

Что вам нужно сделать, это установить поток, в котором выполняется тест, в режим STA, и IE быстро закроется.

 [CodedUITest]
 public class DoSomeAutomatedTesting
 {
     public DoSomeAutomatedTesting()
     {
         // Hey! Hey! Hey! We can't do no MTA!
         Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
     }

     [TestMethod]
     public void MyTestMethod()
     {
         using(var ie = new IE())
         {
             ie.AutoClose = true;
             ie.GoTo("http://www.google.com");
         }     
    }
}

Для тех из вас, кто не является старым пукающим, кто занимался программированием COM, здесь описывается STA http://msdn.microsoft.com/en-us/library/windows/desktop/ms680112(v=vs.85).aspx. Короткая история, STA - это метод старой школы, используемый COM для сохранения жизнеспособности существующих, протестированных , работающий однопоточный код, оставшийся с Windows 95 дней в страшном новомодном мире упреждающей многопоточности.

Теперь CLR живет в том, что COM называет MTA. Для тех из нас, кто не живет в 1998 году, вы можете думать о MTA как о реальном мире, где все работает так, как должно. http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421(v=vs.85).aspx

Когда какой-то поток в супер-страшном MTA хочет получить доступ к чему-либо в STA, потоку MTA приказывают сесть на скамейку и ждать своей очереди, если к STA в настоящее время обращаются из другого потока из MTA. Это в основном означает, что иногда, когда погода не подходящая, вы можете получить эти странные лаги.

0 голосов
/ 03 ноября 2011

У меня была та же, периодически возникающая проблема с IE9. Мои коллеги по обе стороны от меня не имеют таких же проблем. Мы только что поняли, что моим браузером по умолчанию является IE, и я склонен открывать его с несколькими запущенными вкладками.

Я работал без открытого IE на рабочем столе, пока выполняются тесты WatIn, и у меня не было проблем с тех пор, как я применил эту практику.

Возможно совпадение или, возможно, ответ?!

...