Frage

Ich bin mit WatiN für unsere UI-Tests zu experimentieren, kann ich Tests an der Arbeit, aber ich kann also nicht danach schließen erhalten.

Ich versuche IE in meiner Klasse aufzuräumen Code zu schließen, WatiN das Beispiel mit IEStaticInstanceHelper Technik .

Das Problem scheint mit dem IE-Thread zu befestigen, die mal aus:

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

(_ ieHwnd ist der Griff in IE gespeichert, wenn IE zum ersten Mal gestartet wird.)

Dies gibt den Fehler:

  

Klasse Cleanup-Methode   Class1.MyClassCleanup fehlgeschlagen. Error   Botschaft:   WatiN.Core.Exceptions.BrowserNotFoundException:   Es kann keine IE-Fenster passende finden   Einschränkung: Attribut 'Hwnd' equals   '1576084'. Suchen abgelaufen nach ‚30‘   Sekunden .. Stack Trace: bei   WatiN.Core.Native.InternetExplorer.AttachToIeHelper.Find (Constraint   findBy, Int32 Timeout, Boolean   waitForComplete)

Ich bin sicher, ich muss etwas offensichtlich fehlt, hat jemand irgendwelche Ideen zu diesem? Dank

Für die Vollständigkeit, die statischen Helfer sieht wie folgt aus:

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

Und die saubere up-Code sieht wie folgt aus:

private static StaticBrowser _staticBrowser;

[ClassCleanup]
public static void MyClassCleanup()
{
    _staticBrowser.Instance.Close();
    _staticBrowser = null;
}
War es hilfreich?

Lösung 3

Fixed mich dies durch mstest Dumping und mit MbUnit statt. Ich fand auch, dass ich auch nicht eine der IEStaticInstanceHelper Sachen zu verwenden, brauchte es nur gearbeitet.

Andere Tipps

Das Problem ist, dass, wenn MSTEST die Methode mit dem [ClassCleanup] Attribute ausführt, wird es auf einem Thread ausgeführt werden, die nicht Teil des STA .

Wenn Sie den folgenden Code ausführen sollte es funktionieren:

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

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

Die kurz WatiN Website erwähnt, dass WatiN wird nicht funktionieren mit Fäden nicht in der STA hier aber es ist nicht offensichtlich, dass [TestMethod] der Lauf in der STA während Methoden wie [ClassCleanup] und [AssemblyCleanupAttribute] nicht.

In der Standardeinstellung beim IE-Objekt zerstört, Autoclose sie den Browser.

Ihr CleanUp-Code kann versuchen, einen Browser bereits in der Nähe zu finden, weshalb Sie einen Fehler haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top