2010-03-18 4 views
5

en fil WatiN in Visual Studio 2008 - second test method fails il y a une bonne solution avec IEStaticInstanceHelper (réponse originale Reusing an IE instance in VS test, sources), mais quand il tire ClassCleanup échoue sur AttachToIE. En conséquence, IEXPLORAR reste en cours d'exécution.Watin dans MSTest - ClassCleanup échouent

Quel est le problème?

Bien sûr, il est possible de tuer tout le processus comme celui-ci:

// Id of IEXPLORAR 
_ie.ProcessID 

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

Mais je ne aime pas vraiment de cette façon ...

Toutes les idées?

+0

je suis tombé sur le même problème, sur Win 7. Merci pour la question. Je suis d'accord que tuer le processus n'est pas propre, mais aussi le faire pour l'instant. –

+0

Merci pour cela, la question elle-même a fourni la réponse pour moi! –

Répondre

2

Il échoue parce que MSTest fait le nettoyage de la classe dans un appartement multi-thread, même pensé qu'il exécute des tests individuels dans un STA. La manière dont WaitN se connecte à IE implique de rechercher des objets COM qui ne sont pas thread-safe et qui ne sont pas exposés à MTA.

Merci pour la solution de contournement kill de processus, en utilisant cela aussi maintenant, bien que j'utilise CloseMainWindow() plutôt que Kill()

0

Vous pouvez utiliser un caractère générique avec la méthode AttachTo de WatiN pour récupérer l'instance de navigateur existante. Cela vous permettra de réutiliser l'instance du navigateur lors des essais ultérieurs ou fermez le navigateur vers le bas si c'est tout ce que vous êtes intéressé par Par exemple:.

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

Vous pouvez déterminer s'il y a une instance IE pour attacher à l'utilisation la méthode Exists avec la même contrainte de recherche. Par exemple:

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