2010-03-18 8 views
5

In discussione WatiN in Visual Studio 2008 - second test method fails c'è una buona soluzione con IEStaticInstanceHelper (risposta originale Reusing an IE instance in VS test, sources), ma quando ClassCleanup spara si fallisce su AttachToIE. Come risultato, IEXPLORAR rimane in esecuzione.WatiN in MSTest - ClassCleanup sicuro

Qual è il problema?

Naturalmente è possibile uccidere solo il processo in questo modo:

// Id of IEXPLORAR 
_ie.ProcessID 

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

ma non mi piace molto questo modo ...

Tutte le idee?

+0

Ho incontrato lo stesso problema, sulla vittoria 7. Grazie per la domanda. Sono d'accordo che uccidere il processo non è pulito, ma anche farlo per ora. –

+0

Grazie per questo, la domanda stessa ha fornito la risposta per me! –

risposta

2

Fallisce perché MSTest fa la pulizia di classe in un appartamento multi-threaded, anche pensato che esegue i test individuali in uno STA. Il modo in cui WaitN si collega a IE riguarda la ricerca di oggetti COM che non sono thread-safe e non sono esposti a MTA.

Grazie per la soluzione processo di uccidere, utilizzando anche questo ora, anche se sto usando CloseMainWindow() piuttosto che Kill()

0

È possibile utilizzare un carattere jolly con il metodo AttachTo di WatiN per acquisire l'istanza del browser esistente. Ciò permetterà di ri-utilizza l'istanza del browser nei test successivi o chiude il browser verso il basso, se questo è tutto quello che interessa, ad esempio:.

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

È possibile determinare se v'è un 'istanza di IE da allegare ad usare il metodo Exists con lo stesso Find Findint. Per esempio:

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