Appium
Este plugin permite usar Wakamiti para escribir escenarios que interactuen con un servidor Appium. Appium es un proyecto open-source diseñado para facilitar la automatización de tests UI en varias plataformas, incluyendo aplicaciones móviles.
El uso de este plugin requiere un servidor Appium en marcha, al igual que un dispositivo virtual emulado.
AVISO
En su estado actual, este plugin es más una prueba de concepto que un plugin plenamente funcional. Los pasos y la configuración indicada pueden variar en futuras versiones.
- Instalación
-
- Seleccionar un elemento de interfaz a partir de su ID
- Seleccionar un elemento de interfaz a partir de su tipo
- Seleccionar un elemento de interfaz a partir de su ruta
- Teclear un texto en un elemento
- Se pulsa sobre un elemento
- Se pulsa dos veces sobre un elemento
- Valida el texto de un elemento
- Valida que un elemento está habilitado
- Valida que un elemento está deshabilitado
- Validar que se muestra un elemento
- Validar que no se muestra un elemento
- Emular una llamada entrante
- Aceptar una llamada entrante
- Rechazar una llamada entrante
- Finaliza la llamada actual
- Uso
Instalación
Incluye el módulo en la sección correspondiente.
es.iti.wakamiti:appium-wakamiti-plugin:2.5.0
es.iti.wakamiti:appium-wakamiti-plugin:2.5.0
<dependency> <groupId>es.iti.wakamiti</groupId> <artifactId>appium-wakamiti-plugin</artifactId> <version>2.5.0</version> </dependency>
<dependency> <groupId>es.iti.wakamiti</groupId> <artifactId>appium-wakamiti-plugin</artifactId> <version>2.5.0</version> </dependency>
Configuración
Se puede especificar cualquier capacidad a pasar al Web Driver usando la clave adecuada con el formato
appium.capabilities.xxxxxx
. En este document se describen las opciones mas relevantes, pero para una lista exhaustiva de las propiedades disponibles, consultar el borrador W3C WebDriver.
appium.url
- Tipo:
string
obligatorio
La URL del servidor Appium.
Ejemplo:
appium: url: http://127.0.0.1:4723/wd/hub
appium.capabilities.app
- Tipo:
file
obligatorio
La ruta completa de la aplicación a testear.
Ejemplo:
appium: capabilities: app: ApiDemos-debug.apk
appium.capabilities.platformName
- Tipo:
string
obligatorio
El tipo de plataforma móvil que se va a testear.
Ejemplo:
appium: capabilities: platformName: Android
appium.capabilities.platformVersion
- Tipo:
integer
obligatorio
La versión de la plataforma que se va a testear.
Ejemplo:
appium: capabilities: platformVersion: 11
appium.capabilities.appPackage
- Tipo:
string
obligatorio
El nombre del paquete que contiene la aplicación que se va a testear.
Ejemplo:
appium: capabilities: appPackage: io.appium.android.apis
appium.capabilities.appActivity
- Tipo:
string
obligatorio
El nombre de la actividad a testear.
Ejemplo:
appium: capabilities: appActivity: '.view.TextFields'
Pasos
Este plugin proporciona los siguientes pasos:
Seleccionar un elemento de interfaz a partir de su ID
el elemento de interfaz con el ID {text}
el elemento de interfaz con el ID {text}
Selecciona un elmento que será el sujeto de los siguientes pasos.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
text |
text required |
ID del elemento |
Ejemplos:
Dado el elemento de interfaz con el ID '3423423'
Seleccionar un elemento de interfaz a partir de su tipo
el elemento de interfaz de tipo {text}
el elemento de interfaz de tipo {text}
Selecciona un elmento que será el sujeto de los siguientes pasos.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
text |
text required |
Tipo del elemento |
Ejemplos:
Dado el elemento de interfaz de tipo 'android.widget.EditText'
Seleccionar un elemento de interfaz a partir de su ruta
el elemento de interfaz con ruta {text}
el elemento de interfaz con ruta {text}
Selecciona un elmento que será el sujeto de los siguientes pasos.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
text |
text required |
Ruta del elemento |
Ejemplos:
Dado el elemento de interfaz con ruta 'main.form.name'
Teclear un texto en un elemento
se escribe el texto {text} en ese elemento
se escribe el texto {text} en ese elemento
Emula la acción de introducir un texto cuando un elemento se ha seleccionado.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
text |
text required |
Contenido del elemento |
Ejemplos:
Cuando se escribe el texto 'John' en ese elemento
Se pulsa sobre un elemento
se pulsa sobre ese elemento
se pulsa sobre ese elemento
Emula la acción de pulsar sobre un elemento.
Ejemplos:
Cuando se pulsa sobre ese elemento
Se pulsa dos veces sobre un elemento
se pulsa dos veces ese elmento
se pulsa dos veces ese elmento
Emula la acción de pulsar dos veces sobre un elemento.
Ejemplos:
Cuando se pulsa dos veces sobre ese elemento
Valida el texto de un elemento
ese elemento contiene el valor {text}
ese elemento contiene el valor {text}
Comprueba que el elemento previamente seleccionado contiene un texto específico.
Ejemplos:
Entonces ese elemento contiene el valor 'Accepted'
Valida que un elemento está habilitado
ese elemento esta habilitado
ese elemento esta habilitado
Comprueba que el elemento previamente seleccionado está habilitado.
Ejemplos:
Entonces ese elemento esta habilitado
Valida que un elemento está deshabilitado
ese elemento esta deshabilitado
ese elemento esta deshabilitado
Comprueba que el elemento previamente seleccionado está deshabilitado.
Ejemplos:
Entonces ese elemento esta deshabilitado
Validar que se muestra un elemento
ese elemento se muestra por pantalla
ese elemento se muestra por pantalla
Comprueba que el elemento previamente seleccionado está siendo mostrado por pantalla.
Ejemplos:
Entonces ese elemento se muestra por pantalla
Validar que no se muestra un elemento
ese elemento no se muestra por pantalla
ese elemento no se muestra por pantalla
Comprueba que el elemento previamente seleccionado no está siendo mostrado por pantalla.
Ejemplos:
Entonces ese elemento no se muestra por pantalla
Emular una llamada entrante
se recibe una llamada entrante con el numero {text}
se recibe una llamada entrante con el numero {text}
Emula una llamada entrante de un número de teléfono específico. Solo disponible si la aplicación a testear está siendo ejecutada en un dispositivo emulado.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
text |
text required |
Número de teléfono |
Ejemplos:
Cuando se recibe una llamada entrante con el numero '555-4324-432'
Aceptar una llamada entrante
se acepta la llamada entrante
se acepta la llamada entrante
Acepta la llamada que está entrando en ese momento.
Ejemplos:
Cuando se acepta la llamada entrante
Rechazar una llamada entrante
se rechaza la llamada entrante
se rechaza la llamada entrante
Rechaza la llamada que está entrando en ese momento.
Ejemplos:
Cuando se rechaza la llamada entrante
Finaliza la llamada actual
se finaliza la llamada
se finaliza la llamada
Finaliza (cuelga) la llamada actual.
Ejemplos:
Cuando se finaliza la llamada
Uso
- Instalar Android SDK
sudo apt install android-sdk
sudo apt install android-sdk
- Agregar la variable de entorno ANDROID_HOME
(p.ej. $HOME/Android/Sdk )
- Instalar cmdline-tools
- Instalar Appium y Appium-doctor
npm install -g appium npm install @appium/doctor --location=global
npm install -g appium npm install @appium/doctor --location=global
- Comprobar la instalación
appium-doctor --android
appium-doctor --android
Todo debería salir como OK, en caso contrario revisar los checks en rojo.
- Arrancar el servidor Appium
appium
appium
El puerto por defecto es 4723
Descargar APK de prueba en: https://github.com/appium/appium/raw/1.x/sample-code/apps/ApiDemos-debug.apk
- Crear un dipositivo Virtual
$ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd --force --name Nexus6P --abi google_apis_playstore/x86 --package 'system-images;android-30;google_apis_playstore;x86' --device "Nexus 6P"
$ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd --force --name Nexus6P --abi google_apis_playstore/x86 --package 'system-images;android-30;google_apis_playstore;x86' --device "Nexus 6P"
- Iniciar el emulador Android
$ANDROID_HOME/emulator/emulator -avd Nexus6P
$ANDROID_HOME/emulator/emulator -avd Nexus6P
Si en algún momento el emulador se queda congelado y dice que ya existe una emulación en curso, se puede limpiar el estado con
$ANDROID_HOME/platform-tools/adb kill-server
$ANDROID_HOME/platform-tools/adb kill-server
Lo ideal sería poder lanzar todo esto de manera semiautomática únicamente a partir del APK, pero de momento hay que:
- Instalar Android Studio
- Crear dispositivo virtual (AVD) Por ejemplo, Pixel 2 API 30 con Android 11
- Arrancar el AVD con el botón de play