2010-03-18 99 views
5

在線程WatiN in Visual Studio 2008 - second test method fails 存在與IEStaticInstanceHelper(原來的答案Reusing an IE instance in VS testsources)一個很好的解決方案,但是當ClassCleanup觸發它上AttachToIE失敗。結果IEXPLORAR繼續運行。華廷在MSTest的 - ClassCleanup失敗

問題是什麼?

當然有可能殺了這樣的過程:

// Id of IEXPLORAR 
_ie.ProcessID 

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

但我真的不喜歡這種方式...

任何想法?

+0

我遇到了同樣的問題,在Win 7 謝謝你的問題。我同意殺死這個過程不乾淨,但現在也這樣做。 –

+0

感謝您的提問,這個問題本身就爲我提供了答案! –

回答

2

它失敗,因爲MSTest的做在多線程公寓類清理,甚至認爲它運行在一個STA單獨的測試。 WaitN連接IE的方式涉及查找不是線程安全的COM對象,並且不會暴露給MTA。

感謝進程kill的解決方法,使用過了,雖然我使用CloseMainWindow()而不是Kill()

0

您可以使用通配符和WatiN的AttachTo方法來獲取現有的瀏覽器實例。這將讓在隨後的測試中您重新使用瀏覽器實例或關閉瀏覽器下來,如果這是你有興趣,例如:

// 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實例連接到使用具有相同Find Constraint的Exists方法。例如:

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