Domanda

Sto sperimentando con WatiN per il nostro test dell'interfaccia utente, posso avere le prove per il lavoro, ma non riesco a IE per chiudere in seguito.

Sto cercando di chiudere IE nella mia classe di codice su pulito, usando l'esempio di WatiN IEStaticInstanceHelper tecnica .

Il problema sembra essere attaccarsi al filo IE, che timeout:

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

(_ ieHwnd è la maniglia per IE memorizzato quando IE è lanciata.)

Questo dà l'errore:

  

metodo di classe Cleanup   Class1.MyClassCleanup riuscita. Errore   Messaggio:   WatiN.Core.Exceptions.BrowserNotFoundException:   Impossibile trovare una finestra di corrispondenza di IE   vincolo: attributo 'hwnd' eguali   '1576084'. Cerca scaduto dopo il '30'   secondi .. Stack Trace: a   WatiN.Core.Native.InternetExplorer.AttachToIeHelper.Find (Constraint   findBy, Int32 timeout, booleano   waitForComplete)

Sono sicuro Devo mancare qualcosa di ovvio, qualcuno ha avuto qualche idea su questo? Grazie

Per completezza, gli sguardi di supporto statiche come questo:

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

ed il codice alto pulito aspetto:

private static StaticBrowser _staticBrowser;

[ClassCleanup]
public static void MyClassCleanup()
{
    _staticBrowser.Instance.Close();
    _staticBrowser = null;
}
È stato utile?

Soluzione 3

Risolto questo me stesso dal dumping mstest e utilizzando MbUnit invece. Ho scoperto anche che non ho bisogno di usare una qualsiasi delle cose IEStaticInstanceHelper o, semplicemente funzionato.

Altri suggerimenti

Il problema è che quando MSTEST esegue il metodo con l'attributo [ClassCleanup], verrà eseguito su un filo che non fa parte della STA .

Se si esegue il seguente codice dovrebbe funzionare:

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

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

Il sito brevemente WatiN menziona che WatiN non funzionerà con fili non nel STA qui ma non è ovvio che la corsa di [TestMethod] nel STA mentre metodi come [ClassCleanup] e [AssemblyCleanupAttribute] non lo fanno.

Per impostazione predefinita, quando oggetto IE vengono distrutti, essi autoclose browser.

Il codice di pulitura può tentare di trovare un browser già vicino, che il motivo per cui si dispone di un errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top