Problema fissaggio WatiN a IE
-
26-09-2019 - |
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
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;
}
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.