Question

J'expérimente Watin pour nos tests d'interface utilisateur, je peux obtenir des tests au travail, mais je ne peux pas fermer IE à la suite.

Je suis en train de fermer IE dans ma classe propre code up, en utilisant l'exemple de Watin technique IEStaticInstanceHelper .

Le problème semble être la fixation à filetage IE, qui expire:

_instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd));

(_ ieHwnd est la poignée pour IE stockée lorsque IE est d'abord lancée.)

Cela donne l'erreur:

  

Classe méthode de nettoyage   n'a pas Class1.MyClassCleanup. Erreur   Message:   WatiN.Core.Exceptions.BrowserNotFoundException:   Impossible de trouver un correspondant de la fenêtre IE   contrainte: l'attribut « hwnd » égal à égal   '1576084'. Recherche a expiré après « 30 »   secondes .. Stack Trace: à   WatiN.Core.Native.InternetExplorer.AttachToIeHelper.Find (Constraint   findBy, temporisation Int32, Boolean   waitForComplete)

Je suis sûr que je dois manquer quelque chose d'évident, Quelqu'un at-il des idées sur celui-ci? Merci

Pour être complet, les regards assistants statiques comme ceci:

public class StaticBrowser
{
    private IE _instance;
    private int _ieThread;
    private string _ieHwnd;

    public IE Instance
    {
        get
        {
            var currentThreadId = GetCurrentThreadId();
            if (currentThreadId != _ieThread)
            {
                _instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd));
                _ieThread = currentThreadId;
            }
            return _instance;
        }
        set
        {
            _instance = value;
            _ieHwnd = _instance.hWnd.ToString();
            _ieThread = GetCurrentThreadId();
        }
    }

private int GetCurrentThreadId()
{
    return Thread.CurrentThread.GetHashCode();
}
    }

Et le code nettoyage se présente comme suit:

private static StaticBrowser _staticBrowser;

[ClassCleanup]
public static void MyClassCleanup()
{
    _staticBrowser.Instance.Close();
    _staticBrowser = null;
}
Était-ce utile?

La solution 3

fixe moi-même par le dumping MSTest et en utilisant à la place MbUnit. J'ai aussi trouvé que je ne l'ai pas besoin d'utiliser l'une des choses IEStaticInstanceHelper soit, cela fonctionne simplement.

Autres conseils

Le problème est que lorsque MSTEST exécute la méthode avec l'attribut [ClassCleanup], il sera exécuté sur un thread qui ne fait pas partie du STA .

Si vous exécutez le code suivant, il devrait fonctionner:

[ClassCleanup]
public static void MyClassCleanup()
{
    var thread = new Thread(() =>
    {
        _staticBrowser.Instance.Close();
        _staticBrowser = null;
     });

    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();
}

Le site brièvement Watin mentionne que Watin ne fonctionnera pas avec des fils pas dans le STA ici mais il est évident que la course de [TestMethod] dans la STA alors que les méthodes comme [ClassCleanup] et [AssemblyCleanupAttribute] ne le font pas.

Par défaut, lorsque l'objet IE sont détruits, ils autoclose le navigateur.

Votre code CleanUp peut essayer de trouver un navigateur déjà proche, qui la raison pour laquelle vous avez une erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top