WatiN в MSTest - Ошибка ClassCleanup - PullRequest
5 голосов
/ 18 марта 2010

В потоке WatiN в Visual Studio 2008 - сбой второго метода тестирования Есть хорошее решение с IEStaticInstanceHelper (оригинальный ответ Повторное использование экземпляра IE в тесте VS , sources ), но когда ClassCleanup запускает его, не удается в AttachToIE. В результате IEXPLORAR продолжает работать.

В чем проблема?

Конечно, можно просто убить процесс следующим образом:

// Id of IEXPLORAR
_ie.ProcessID

Process.GetProcessById(_processId).Kill();
this._ie = null;

Но мне не очень нравится этот способ ...

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Сбой, потому что MSTest выполняет очистку класса в многопоточной квартире, даже несмотря на то, что он запускает отдельные тесты в STA.Способ, которым WaitN подключается к IE, заключается в поиске COM-объектов, которые не являются поточно-ориентированными и не подвержены MTA.

Спасибо за обходной путь процесса kill, использую его и сейчас, хотя я использую CloseMainWindow() вместо Kill()

0 голосов
/ 28 декабря 2010

Вы можете использовать подстановочный знак с методом AttachTo WatiN, чтобы получить существующий экземпляр браузера. Это позволит вам повторно использовать экземпляр браузера в последующих тестах или закрыть браузер, если это все, что вас интересует. Например:

// find first browser matching our wildcard
IE found = Browser.AttachTo<IE>(Find.ByTitle(new Regex(".*")));

// then close just that one
found.Close();

// or close all running IE instances at once
// found.ForceClose();

Вы можете определить, существует ли экземпляр IE, к которому нужно присоединиться, с помощью метода Exists с тем же ограничением поиска. Например:

Constraint browserWildcard = Find.ByTitle(new new Regex(".*"));
if(IE.Exists<IE>(browserWildcard))
{
  // ...
}
...