Pregunta

estoy experimentando con WatiN para nuestras pruebas de interfaz de usuario, puedo conseguir pruebas para trabajar, pero no puedo conseguir IE para cerrar después.

Estoy intentando cerrar IE en mi clase de código de la limpieza, utilizando el ejemplo de WatiN IEStaticInstanceHelper técnica .

El problema parece ser asociar a la rosca IE, que el tiempo de espera:

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

(_ ieHwnd es el mango para IE almacenado cuando IE se inicia primero.)

Esto da el error:

  

método de clase Cleanup   Class1.MyClassCleanup falló. Error   Mensaje:   WatiN.Core.Exceptions.BrowserNotFoundException:   No se pudo encontrar una ventana de coincidencia de IE   restricción: Atributo '' iguales hwnd   '1576084'. Buscar expiró después de '30'   segundos .. Seguimiento de la pila: en   WatiN.Core.Native.InternetExplorer.AttachToIeHelper.Find (Restricción   findBy, Int32 tiempo de espera, de Boole   waitForComplete)

Estoy seguro de que debo estar perdiendo algo obvio, ¿alguien tiene alguna idea acerca de éste? Gracias

Para completar, las miradas ayudante estático como sigue:

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

Y el código de la limpieza es similar al siguiente:

private static StaticBrowser _staticBrowser;

[ClassCleanup]
public static void MyClassCleanup()
{
    _staticBrowser.Instance.Close();
    _staticBrowser = null;
}
¿Fue útil?

Solución 3

Fijo esto mismo por el dumping y el uso de mstest MbUnit lugar. También encontré que no tenía necesidad de utilizar ninguna de las cosas IEStaticInstanceHelper bien, sólo funcionó.

Otros consejos

El problema es que cuando MSTEST ejecuta el método con el atributo [ClassCleanup], se ejecuta en un hilo que no es parte de la STA .

Si ejecuta el siguiente código debería funcionar:

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

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

El sitio web menciona brevemente WatiN que WatiN no funcionará con hilos no en la STA aquí pero no es obvio que la carrera de [TestMethod] en la STA mientras que los métodos como [ClassCleanup] y [AssemblyCleanupAttribute] no lo hacen.

Por defecto, cuando se destruyen objeto IE, que Autoclose el navegador.

Su código de limpieza puede tratar de encontrar un navegador ya está cerca, que por qué tiene un error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top