Nota traducción: traduje este artículo para ayudar a aquellos que están dando sus primeros pasos en la automatización de pruebas y desean aprender más sobre la herramienta Appium. Describe el principio general de funcionamiento de los controladores de Appium, así como sus tipos y propósitos. Al comienzo del viaje, muchos evaluadores carecen de información ordenada, y este material ayudará a determinar la elección de la herramienta adecuada.
Appium es una herramienta multiplataforma que le permite automatizar las pruebas de aplicaciones móviles (iOS y Android) y de escritorio al mismo tiempo. La forma de implementar este modelo multiplataforma es usar varios controladores. Esencialmente, Appium tiene aproximadamente la misma arquitectura que Selenium WebDriver, que también utiliza una serie de controladores independientes para admitir la automatización de pruebas entre navegadores.
Hay controladores de Appium separados para diferentes herramientas de automatización, lo que generalmente significa usar un controlador para cada plataforma (uno para iOS, uno para Android, etc.). Sin embargo, hay excepciones. Están relacionados con el hecho de que varias herramientas de aplicación se utilizan junto con Appium en la automatización de las aplicaciones de prueba para algunas plataformas (por ejemplo, para Android). De hecho, hay tres controladores para Android: basados en UiAutomator, UiAutomator 2 y Espresso.
El principio de funcionamiento de los conductores.
Los controladores son quizás el componente más importante de toda la herramienta, porque su tarea es ejecutar los comandos de la API Appium (conocida como Protocolo WebDriver) en una plataforma específica. En esencia, los controladores son traductores que transforman el código del cliente Appium en algo que ejecuta comandos en iOS, Android, etc.
Por simplicidad arquitectónica, entre otras razones, cada controlador individual es un servidor independiente compatible con WebDriver (aunque no tiene todas las opciones que tiene el servidor Appium principal). Dentro del controlador, los comandos recibidos se procesan de una manera peculiar. Por ejemplo, se pueden transferir a un proceso separado que ejecuta código Java en un dispositivo Android.
Los controladores en sí tienen una arquitectura interna bastante compleja, a veces basada en una amplia gama de tecnologías. A continuación se muestra un diagrama que muestra la pila de tecnologías involucradas en el controlador XCUITest (controlador iOS actual):

Como puede ver, el principio del controlador XCUITest no es tan simple. Está disponible como parte de Appium y comienza cada vez que inicia una sesión de iOS. En el interior, el controlador utiliza otra herramienta, conocida como WebDriverAgent, que se encarga de convertir los comandos del Protocolo WebDriver en llamadas a la biblioteca XCUITest.
Muchos controladores tienen una arquitectura similar, aunque cada uno de ellos puede implementar la suya, porque finalmente el controlador se publica en npm como una clase que hereda la clase Appium BaseDriver. Esto permite que los controladores se conecten fácilmente a Appium.
Tipos de conductores
Entonces, ¿cuántos conductores hay? Honestamente, es bastante difícil decirlo con certeza porque, además de los controladores oficiales de Appium, también hay otros no oficiales. Pero si miramos el código fuente de Appium, veremos lo siguiente:
const AUTOMATION_NAMES = { APPIUM: 'Appium', UIAUTOMATOR2: 'UiAutomator2', UIAUTOMATOR1: 'UiAutomator1', XCUITEST: 'XCUITest', YOUIENGINE: 'YouiEngine', ESPRESSO: 'Espresso', TIZEN: 'Tizen', FAKE: 'Fake', INSTRUMENTS: 'Instruments', WINDOWS: 'Windows', MAC: 'Mac', };
Los nombres de automatización son claves para varios controladores que utiliza Appium. Esta sección de código determina qué líneas pueden usarse como valores para la capacidad de automaName. Cada controlador generalmente solo admite una plataforma. Aquí hay una breve descripción de cada controlador según su nombre de automatización:
- Appium es solo un puntero al controlador predeterminado para la plataforma seleccionada y no es un controlador separado;
- UiAutomator2 ( repositorio ): el controlador actual para la plataforma Android, utilizado de forma predeterminada y basado en la herramienta Google UiAutomator;
- UiAutomator1 ( repositorio ) es un antiguo controlador de Android basado en una versión anterior de UiAutomator. Este controlador no será compatible en el futuro, por lo que es mejor abandonarlo a favor de UiAutomator2;
- XCUITest ( repositorio ): el controlador predeterminado para iOS, basado en la herramienta Apple XCUITest;
- YouiEngine ( repositorio ): un controlador de desarrolladores de You.i Labs, que se utiliza para automatizar las pruebas de aplicaciones para diversas plataformas creadas en base a su SDK;
- Espresso ( repositorio ): el último controlador para Android, basado en la herramienta Google Espresso;
- Tizen ( repositorio ): un controlador de los desarrolladores de Samsung para automatizar las pruebas de las aplicaciones basadas en Xamarin utilizadas en el sistema operativo Tizen;
- Fake (el nombre habla por sí mismo) se utiliza como una herramienta de prueba interna de Appium. Nunca tendrás que usarlo;
- Instrumentos ( repositorio ): un controlador desactualizado utilizado para aplicaciones con iOS 9.3 y versiones inferiores;
- Windows ( repositorio ): Microsoft ha ensamblado un servidor compatible con Appium, llamándolo WinAppDriver, y este controlador lo conecta al servidor principal de Appium. Diseñado directamente para automatizar aplicaciones de escritorio para Windows;
- Mac ( repositorio ): un controlador que le permite automatizar la prueba de aplicaciones de escritorio para Mac.
Como ya se mencionó, cada uno de estos controladores tiene su propia arquitectura, que se puede ver mirando este diagrama:

Preguntas frecuentes para conductores
Entonces, ¿cómo saber qué controlador utilizar?
Bueno, si necesita escribir
pruebas automáticas para aplicaciones para iOS, Windows, Mac o Tizen , la elección es obvia: use el controlador predeterminado para cada una de estas plataformas. En cuanto a Android, aquí tienes que elegir entre UiAutomator2 y Espresso. Es mejor saber de antemano más acerca de cada una de estas herramientas y comprender cuál es la mejor para su caso. Las capacidades de los controladores UiAutomator2 y Espresso son similares, pero no completamente idénticas.
¿Todos los controladores admiten los mismos comandos por igual?Si y no En un nivel fundamental, estamos limitados por las capacidades de automatización proporcionadas por los proveedores de la plataforma. Toque en un dispositivo Android funciona igual que en un dispositivo iOS. Pero el proceso de ejecución de otros comandos puede variar. Los desarrolladores de Appium, en la medida de lo posible, intentan garantizar el mismo comportamiento del controlador en diferentes plataformas.
¿Puedo cambiar de un controlador a otro y esperar que mis pruebas fallen?Si y no Todo depende de los controladores de los que estamos hablando. Una de las ventajas de usar Appium es que puede cambiar de una herramienta de automatización a otra (por ejemplo, de UiAutomator2 a Espresso) sin sacrificar un conjunto de pruebas listo para usar. Sin embargo, debe migrar lenta y metódicamente, asegurándose de que todo suceda como espera. El equipo de Appium a veces publica pautas de migración para pasar de un controlador a otro; debe prestarles atención antes de migrar.
¿Puedo crear mi propio controlador?Si! Muchos ya lo han hecho, en particular
Jason Huggins y
yo (en AppiumConf 2019). Pero hay otros controladores propietarios, como
el controlador hbbtv de Christian Broman .
¿Cambiarán los controladores en Appium 2.0?Esta es una muy buena pregunta! Uno de los aspectos negativos del sistema del controlador Appium es que todos están incluidos en la dependencia del servidor Appium. Pero nos estamos moviendo para garantizar que los controladores existan en un sistema menos cohesivo, donde puede elegir qué controladores específicos usar con Appium. Si resuelve este problema, no tiene que instalar el viejo controlador UiAutomator2 y conectar sus dependencias cuando usa Appium solo para ejecutar pruebas de iOS. (¿Sabes que hay una
propuesta para el desarrollo de Appium 2.0 ?)
Espero que este artículo te haya sido útil. Estaré encantado de leer en los comentarios sobre su experiencia con los controladores Appium.