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!