2010-03-18 13 views
5

En hilo WatiN in Visual Studio 2008 - second test method fails hay una buena solución con IEStaticInstanceHelper (respuesta original Reusing an IE instance in VS test, sources), pero cuando se dispara ClassCleanup falla en AttachToIE. Como resultado, IEXPLORAR sigue ejecutándose.WatiN en MSTest - ClassCleanup fallar

¿Cuál es el problema?

Por supuesto, es posible simplemente matar el proceso de esta manera:

// Id of IEXPLORAR 
_ie.ProcessID 

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

pero no me gusta mucho de esta manera ...

¿Alguna idea?

+0

me encontré con el mismo problema, en Win 7. Gracias por la pregunta. Estoy de acuerdo en que el proceso no está limpio, sino que también lo estoy haciendo por ahora. –

+0

Gracias por esto, ¡la pregunta en sí me brindó la respuesta! –

Respuesta

2

falla porque MSTest hace la limpieza en un apartamento de clase multi-hilo, incluso pensó que realiza pruebas individuales en un STA. La forma en que WaitN se conecta a IE implica buscar objetos COM que no son seguros para subprocesos y no están expuestos a MTA.

Gracias por la solución matar el proceso, utilizando eso también ahora, a pesar de que estoy usando en lugar de CloseMainWindow()Kill()

0

Puede usar un comodín con el método AttachTo de WatiN para captar la instancia existente del navegador. Esto le permitiría reutilizar la instancia del navegador en las pruebas posteriores o cerrar el navegador hacia abajo si eso es todo lo que interesa, por ejemplo:.

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

Puede determinar si hay una instancia de IE para insertarse en el uso el método Exists con la misma Resistencia de Buscar. Por ejemplo:

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