Appium es una herramienta de código abierto para automatizar pruebas de aplicaciones móviles —Android e iOS— manejando la app real como lo haría una persona. Usa el mismo protocolo estándar que Selenium, el WebDriver del W3C, así que quien viene de automatización web reconoce la idea. Su arquitectura se basa en drivers: Appium por sí solo no sabe hablar con ningún sistema; se le instalan controladores específicos —UiAutomator2 para Android, XCUITest para iOS— que traducen los comandos a cada plataforma. Al iniciar una sesión se le pasan las capacidades: qué plataforma, qué dispositivo, qué app. Después, las pruebas localizan elementos en la pantalla y actúan sobre ellos. Lo importante que nadie advierte: el testing móvil es más difícil y más frágil que el web —dos sistemas operativos distintos, dispositivos físicos, permisos, gestos—, así que hay que diseñar las pruebas con cuidado para que no se vuelvan inestables.
Ver índice de contenidos
Qué es Appium
Appium automatiza aplicaciones móviles: escribís un programa que abre la app, toca botones, escribe en campos, desliza pantallas y comprueba resultados, todo sin intervención humana. Sirve para apps nativas (hechas para Android o iOS), web móviles (en el navegador del teléfono) e híbridas (una mezcla).
Su gran ventaja es que usa el protocolo WebDriver del W3C —el mismo estándar que Selenium en web—, con dos consecuencias prácticas: las pruebas se escriben en el lenguaje que prefieras (hay clientes para varios), y quien ya automatiza web reconoce el modelo de trabajo. Appium se gobierna bajo la OpenJS Foundation, la misma fundación de muchos proyectos abiertos de referencia.
La arquitectura de drivers
Esta es la idea que hay que entender antes de escribir una sola prueba. Appium por sí mismo no sabe hablar con ningún teléfono: es un coordinador que recibe comandos estándar y los reparte a un driver, que es quien sabe traducirlos a una plataforma concreta.
# En Appium 2, los drivers se instalan por separado, a demanda.
npm install -g appium
# Driver para Android.
appium driver install uiautomator2
# Driver para iOS.
appium driver install xcuitest
# Ver qué drivers hay instalados.
appium driver listEste modelo modular es el cambio central de Appium 2: antes venía todo junto; ahora instalás solo lo que necesitás. La consecuencia práctica: si vas a automatizar Android, instalás UiAutomator2; para iOS, XCUITest. Y para iOS hay un requisito ineludible —solo se puede automatizar desde una máquina con macOS y las herramientas de Apple—, algo que conviene saber antes de planificar.
Las capacidades de sesión
Cuando una prueba arranca, abre una sesión con Appium y le pasa las capacidades (capabilities): un conjunto de datos que describen qué se va a automatizar y dónde. Son el equivalente a decirle «quiero esta app, en este dispositivo, con este driver».
// Capacidades típicas para una app Android.
{
"platformName": "Android",
"appium:automationName": "UiAutomator2",
"appium:deviceName": "emulador-pruebas",
"appium:app": "/ruta/a/la/app.apk"
}Las capacidades definen el qué y el dónde; el cuerpo de la prueba define el cómo. Cambiar de un emulador a un dispositivo real, o de una versión de la app a otra, suele ser cuestión de cambiar capacidades, no de reescribir la prueba. Por eso, igual que con las variables de entorno en las pruebas de API, conviene mantener las capacidades separadas y parametrizables.
Localizar elementos
El corazón de cualquier prueba de interfaz es encontrar el elemento sobre el que hay que actuar —un botón, un campo— y hacerlo de forma estable. En móvil, las estrategias de localización más robustas son las que dependen de identificadores que quien desarrolla asigna a propósito:
- Identificador de accesibilidad. El más recomendado: un identificador que el desarrollador pone pensado para automatización y accesibilidad, estable entre versiones y compartible entre Android e iOS.
- Identificador de recurso (Android) o nombre (iOS). Estables, específicos de cada plataforma.
- Por texto o por posición en el árbol. Los más frágiles: el texto cambia con el idioma y la posición cambia con cualquier rediseño. A evitar salvo que no haya otra opción.
La estabilidad de las pruebas móviles depende de que los elementos tengan identificadores buenos, y eso lo pone quien desarrolla. Un proyecto donde QA pide identificadores de accesibilidad y desarrollo los agrega tiene pruebas robustas; uno donde hay que localizar por texto o posición tiene pruebas que se rompen con cada cambio. Pedir buenos identificadores no es un capricho: es lo que hace viable la automatización.
Por qué el móvil es más difícil
Conviene decirlo sin adornos: automatizar en móvil es más difícil y más frágil que en web, y quien no lo sabe se frustra creyendo que hace algo mal. Los motivos son estructurales:
- Dos sistemas operativos distintos. Android e iOS tienen drivers, requisitos y comportamientos diferentes. Cubrir ambos es casi mantener dos suites.
- Dispositivos físicos y emuladores. Tamaños de pantalla, versiones del sistema, fabricantes: la fragmentación de Android es enorme, y lo que pasa en un dispositivo no siempre pasa en otro.
- Permisos y ventanas del sistema. Diálogos de permisos, actualizaciones, notificaciones: interrupciones que en web no existen y que rompen una prueba si no se las contempla.
- Gestos y tiempos. Deslizar, mantener presionado, esperar animaciones: más fuentes de inestabilidad que un simple clic.
Todo esto hace que las pruebas inestables (las que a veces pasan y a veces no) sean el problema número uno del testing móvil. Diseñar para la estabilidad —esperas explícitas, buenos localizadores, aislamiento— es imprescindible, y el tema se trata en profundidad en cómo detectar y solucionar flaky tests. La decisión de qué automatizar en móvil y qué dejar manual se apoya en estrategias de prueba: por su costo, en móvil se automatiza selectivamente.
Errores frecuentes
- No instalar el driver de la plataforma. Appium sin driver no hace nada; hay que instalar UiAutomator2 o XCUITest.
- Localizar por texto o posición. Se rompe con el idioma y con cualquier rediseño; usar identificadores de accesibilidad.
- No pedir buenos identificadores a desarrollo. La estabilidad depende de ellos; es una colaboración, no un extra.
- Ignorar los diálogos de permisos. Interrumpen la prueba si no se los contempla desde el inicio.
- Esperar con pausas fijas. Las esperas por tiempo fijo son la principal causa de inestabilidad; usar esperas explícitas por condición.
- Querer automatizar iOS sin macOS. XCUITest requiere una máquina Apple; hay que planificarlo.
- Pretender automatizarlo todo. En móvil el costo es alto; se automatiza lo crítico y repetitivo.
Preguntas frecuentes
¿Appium sirve para Android y para iOS?
Sí, para ambos, y esa es una de sus grandes ventajas: permite escribir pruebas con el mismo estilo y el mismo protocolo estándar para las dos plataformas. La clave es que Appium usa drivers distintos para cada una —UiAutomator2 para Android y XCUITest para iOS— que traducen los comandos estándar al lenguaje de automatización nativo de cada sistema. En la práctica, aunque el estilo de la prueba se comparte, cubrir las dos plataformas se parece a mantener dos suites, porque el comportamiento, los identificadores y los requisitos difieren. Además, automatizar iOS tiene un requisito ineludible: solo puede hacerse desde una máquina con macOS y las herramientas de Apple, algo que conviene tener en cuenta al planificar antes de empezar.
¿Qué son los drivers en Appium?
Son las extensiones que le permiten a Appium comunicarse con cada plataforma, y son el centro de su arquitectura. Appium por sí solo no sabe hablar con ningún teléfono: funciona como un coordinador que recibe comandos siguiendo el protocolo estándar WebDriver y los reparte al driver adecuado, que sabe traducirlos al lenguaje de automatización nativo de una plataforma concreta. UiAutomator2 hace esa traducción para Android y XCUITest para iOS. En la versión 2 de Appium, los drivers se instalan por separado y a demanda con la interfaz de línea de comandos, en lugar de venir todos incluidos, así que antes de escribir una prueba hay que instalar el driver de la plataforma que se va a automatizar. Esa separación entre el protocolo estándar, que es único, y la traducción específica, que vive en los drivers, es lo que hace flexible a la herramienta.
¿Qué son las capacidades o capabilities?
Son el conjunto de datos que se le pasa a Appium al iniciar una sesión para describir qué se va a automatizar y dónde: la plataforma, el driver que hay que usar, el dispositivo o emulador de destino y la aplicación bajo prueba, entre otros. Definen el qué y el dónde de la automatización, mientras que el cuerpo de la prueba define el cómo. Su utilidad práctica es que cambiar de un emulador a un dispositivo real, o de una versión de la aplicación a otra, suele resolverse cambiando capacidades sin tocar la lógica de la prueba. Por eso conviene mantener las capacidades separadas y parametrizables, de la misma forma que las variables de entorno en las pruebas de API, para que la misma prueba corra en distintos dispositivos y configuraciones.
¿Por qué las pruebas móviles son tan inestables?
Porque el entorno móvil suma capas de complejidad que en web no existen. Hay dos sistemas operativos distintos con comportamientos propios; una enorme fragmentación de dispositivos, tamaños de pantalla y versiones, sobre todo en Android, de modo que lo que funciona en un aparato puede fallar en otro; diálogos del sistema que interrumpen la prueba, como los de permisos, actualizaciones o notificaciones; y gestos y animaciones que introducen tiempos variables. Todo eso hace que las pruebas que a veces pasan y a veces fallan sean el problema número uno de la automatización móvil. La forma de combatirlo es diseñar para la estabilidad: usar identificadores robustos, esperar por condiciones concretas en lugar de por tiempos fijos, contemplar los diálogos del sistema y aislar bien cada prueba, temas que se desarrollan en la guía sobre pruebas inestables.
¿Cómo localizo elementos de forma estable?
Usando identificadores que quien desarrolla asigna a propósito, y no características que cambian con facilidad. La estrategia más recomendada es el identificador de accesibilidad, pensado tanto para la automatización como para las herramientas de accesibilidad, que es estable entre versiones y puede compartirse entre Android e iOS. También son estables el identificador de recurso en Android y el nombre en iOS, aunque son específicos de cada plataforma. Lo que conviene evitar es localizar por el texto visible, que cambia con el idioma, o por la posición del elemento en la jerarquía de la pantalla, que cambia con cualquier rediseño. Como esos identificadores los pone quien desarrolla, conseguir pruebas estables depende de una colaboración con el equipo de desarrollo: pedir buenos identificadores es parte del trabajo de automatización.
¿Conviene automatizar todas las pruebas móviles?
No. En móvil, el costo de crear y mantener pruebas automatizadas es más alto que en web por toda la complejidad del entorno, así que automatizarlo todo no es rentable. La estrategia sensata es automatizar lo que más lo justifica: los flujos críticos del negocio, las pruebas de regresión que hay que repetir con cada versión, y los caminos estables que no cambian seguido. Para lo demás —exploración, validación de experiencia de uso, comprobaciones sobre dispositivos o situaciones poco frecuentes— suele rendir más el testing manual. Esa decisión de qué automatizar y qué dejar a mano forma parte de la estrategia de pruebas del proyecto, que pondera el riesgo, la frecuencia de ejecución y el costo de mantenimiento de cada prueba antes de invertir en automatizarla.
Fuentes
Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.
Aportes de la comunidad Underc0de
- Underc0de, foro. Sección QA (Quality Assurance). Consultas sobre automatización móvil y estabilidad de pruebas.
- Underc0de, foro. Sección Dispositivos móviles. Android, iOS y su ecosistema.
Documentación oficial
- Appium. Appium Documentation. La documentación oficial, con la arquitectura de drivers y plugins de Appium 2.
- Appium. Drivers. Los controladores por plataforma —UiAutomator2 para Android, XCUITest para iOS— y cómo se instalan.
- W3C. WebDriver. El protocolo estándar que Appium usa, el mismo que Selenium.
- OpenJS Foundation. OpenJS Foundation. La fundación bajo la que se gobierna Appium.