Что вам нужно сделать, так это перевести поток, в котором выполняется тест, в режим 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. В основном это означает, что иногда, когда погода неподходящая, вы можете получить эти странные задержки.
person
ntcolonel
schedule
06.08.2013