Testear aplicaciones de escritorio de Windows con Appium y WinAppDriver

Hoy le toca el turno al testeo de aplicaciones de escritorio de Windows con Appium y WinAppDriver. Y es que en todas las empresas tenemos la típica aplicación de escritorio legacy que nadie quiere tocar, pero que de alguna forma tenemos que testear y monitorizar 🙂 Como me hacía falta demostrar que esto es posible, he recuperado el ejemplo con Notepad que se incluye dentro del repositorio de GitHub de WinAppDriver y lo he modificado un poco para que soporte la integración tanto con WinAppDriver como con Appium. En este artículo te cuento cómo configurar tu equipo y cómo lanzar los tests con estas dos herramientas.

Preparación del entorno

Antes de empezar a testear tus aplicaciones, necesitas preparar un poco el entorno. Si ya estás trabajando con Appium, para el testeo de aplicaciones móviles, necesitas, además, instalar WinAppDriver para poder ejecutar las pruebas que realices sobre aplicaciones Windows. Estas pueden ser del tipo Universal Windows Platform (UWP), Windows Presentation Foundation (WPF), Windows Forms (WinForms) o Classic Windows (Win32) pero todas ellas deben poder ejecutarse sobre Windows 10. Para este ejemplo voy a trabajar con Visual Studio y C#, pero también es posible desarrollar las pruebas en otros lenguajes como Java, Python, o Ruby.

Modo desarrollador activado

Para poder ejecutar WinAppDriver necesitas tener habilitado en Settings el modo desarrollador.

Versión de las librerías

El proyecto que ejecute los tests debe tener como versión de las librerías de Selenium las 3.11.2, de lo contrario puedes encontrarte con problemas en la ejecución.

Por último, he modificado un poco el ejemplo del Notepad, el método Setup, para que puedas usarlo tanto con Appium como con WinAppDriver.exe:

    public class NotepadSession
    {
        //protected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723"; //for WinAppDriver.exe
        protected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723/wd/hub"; //for Appium
        private const string NotepadAppId = @"C:\Windows\System32\notepad.exe";

        protected static WindowsDriver<WindowsElement> session;
        protected static WindowsElement editBox;

        public static void Setup(TestContext context)
        {
            // Launch a new instance of Notepad application
            if (session == null)
            {
                // Create a new session to launch Notepad application
                DesiredCapabilities appCapabilities = new DesiredCapabilities();
                appCapabilities.SetCapability("app", NotepadAppId);
                appCapabilities.SetCapability("platformName", "Windows");
                appCapabilities.SetCapability("deviceName", "WindowsPC");
                session = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
                Assert.IsNotNull(session);
                Assert.IsNotNull(session.SessionId);

                // Verify that Notepad is started with untitled new file
                Assert.AreEqual("Untitled - Notepad", session.Title);

                // Set implicit timeout to 1.5 seconds to make element search to retry every 500 ms for at most three times
                session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1.5);

                // Keep track of the edit box to be used throughout the session
                editBox = session.FindElementByClassName("Edit");
                Assert.IsNotNull(editBox);
            }
        }

Solamente he añadido, como constantes, las dos URLs que me hacen falta, dependiendo de si quiero lanzar los test con WinAppDriver o con Appium. También he añadido algunas capacidades que son necesarias para que Appium pueda ejecutarse correctamente, que son deviceName y platformName. En este artículo no me voy a parar en escribir código de test, ya que creo que los ejemplos que hay en el repositorio de WinAppDriver son lo suficientemente buenos para que te hagas una idea de lo que puedes llegar a hacer. Si alguna vez has trabajado con Selenium te va a resultar bastante familiar 😉

Lanzar los tests a través de Appium

Si ya venías trabajando con Appium puedes seguir lanzando las tareas a través del mismo. Sólo debes de tener en cuenta que en el método de Setup debes utilizar la URL http://127.0.0.1:4723/wd/hub y debes especificiar las capacidades deviceName, con “Windows”, y platformName, con “WindowsPC”, para que funcione correctamente. Estas capacidades puedes dejarlas sin problemas si decides trabajar con WinAppDriver.exe. Para lanzar los tests, ejecuta appium a través de la linea de comandos, o a través de Appium Desktop, y haz clic en Run All, en la ventana Test Explorer de Visual Studio.

Utiliza WinAppDriver.exe en lugar de Appium

Si a día de hoy no estás trabajando con Appium, puedes lanzar WinAppDriver.exe en modo standalone. Para este caso, he añadido la ruta donde se instala (C:\Program Files (x86)\Windows Application Driver) en mi variable de entorno Path, para que sea mucho más cómoda su ejecución. Ahora si lanzas WinAppDriver.exe en la consola y ejecutas los tests en Visual Studio verás que el resultado es el mismo que con Appium:

El código de ejemplo con Notepad lo tienes en mi GitHub.

¡Saludos!