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

Incluye el módulo en la sección correspondiente.

es.iti.wakamiti:appium-wakamiti-plugin:2.3.0
<dependency>
  <groupId>es.iti.wakamiti</groupId>
  <artifactId>appium-wakamiti-plugin</artifactId>
  <version>2.3.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}

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}

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}

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

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

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

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}

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

Comprueba que el elemento previamente seleccionado está habilitado.

Ejemplos:

Entonces ese elemento esta habilitado

Valida que un elemento está 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

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

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}

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

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

Rechaza la llamada que está entrando en ese momento.

Ejemplos:

Cuando se rechaza la llamada entrante

Finaliza la llamada actual

se finaliza la llamada

Finaliza (cuelga) la llamada actual.

Ejemplos:

  Cuando se finaliza la llamada

Uso

  1. Instalar Android SDK
  sudo apt install android-sdk
  1. Agregar la variable de entorno ANDROID_HOME
  (p.ej. $HOME/Android/Sdk )
  1. Instalar cmdline-tools

android-sdk

  1. Instalar Appium y Appium-doctor
   npm install -g appium
   npm install @appium/doctor --location=global
  1. Comprobar la instalación
appium-doctor --android

Todo debería salir como OK, en caso contrario revisar los checks en rojo.

  1. Arrancar el servidor 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

  1. 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"
  1. Iniciar el emulador Android
$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

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