QANode Logo

Nó Mobile Flow

O nó Mobile Flow permite automatizar interações com aplicativos móveis nativos (Android e iOS) usando o Appium. Suporta dispositivos reais, emuladores e serviços cloud como BrowserStack, Sauce Labs e LambdaTest.


Visão Geral

PropriedadeValor
Tipomobile-flow
CategoriaMobile
Cor🔴 Vermelho claro (#f87171)
Entradain
Saídaout

Pré-requisitos

Appium

O nó Mobile Flow requer um servidor Appium acessível:

SituaçãoSolução
Versão DesktopO Appium é instalado automaticamente no primeiro uso e iniciado ao executar um fluxo com nó mobile
Servidor próprioInstale manualmente: npm install -g appium + driver: appium driver install uiautomator2 (Android) ou appium driver install xcuitest (iOS)
Cloud (BrowserStack, etc.)Nenhum Appium local necessário — use as credenciais do provedor

Drivers Appium

PlataformaDriverInstalação
AndroidUiAutomator2appium driver install uiautomator2
iOSXCUITestappium driver install xcuitest (requer Xcode no Mac)

Configuração Geral

CampoTipoPadrãoDescrição
CredencialselectCredencial Mobile com configurações de conexão
Modo de Sessãonew / reusenewNova sessão ou reutilizar sessão existente
Session IDstringID para identificar/reutilizar a sessão

Modo de Sessão

  • Nova Sessão (new): Abre uma nova sessão Appium a cada execução. Ideal para testes isolados.
  • Reutilizar Sessão (reuse): Reaproveita uma sessão já criada por outro nó Mobile Flow no mesmo fluxo. Útil para dividir automações longas em múltiplos nós mantendo o mesmo dispositivo conectado.

Credencial Mobile

A credencial centraliza as configurações de conexão e capacidades do dispositivo. Configure em Credenciais → Nova Credencial → Mobile.

Modos de Conexão

ModoDescrição
LocalAppium rodando na mesma máquina (padrão: http://localhost:4723)
Self-hostedAppium em servidor próprio com URL e token de autenticação
SaaSProvedor cloud (BrowserStack, Sauce Labs, LambdaTest, ou Custom)

Capacidades do Dispositivo

CampoDescriçãoExemplo
PlataformaAndroid ou iOSAndroid
Nome do DispositivoNome ou ID do dispositivoemulator-5554, Pixel 7
Versão da PlataformaVersão do SO13.0, 17.0
App PackagePacote do app Androidcom.meuapp.android
App ActivityActivity inicial do Android.MainActivity
Bundle IDIdentificador do app iOScom.meuapp.ios
App PathCaminho do arquivo .apk/.ipa/path/to/app.apk
UDIDID único do dispositivo realR58M20XXXXX
No ResetNão resetar o app entre sessõestrue
Full ResetResetar completamente o estado do appfalse
Automation NameDriver de automaçãoUiAutomator2 (Android), XCUITest (iOS)
Capacidades ExtrasJSON com capacidades adicionais do Appium{"appium:language": "pt"}

Passos (Mobile Steps)

O nó Mobile Flow executa uma sequência de passos configuráveis. Cada passo representa uma ação no dispositivo.

Ações Disponíveis

AçãoDescrição
tapTocar em um elemento
tap-coordsTocar em coordenadas absolutas
typeDigitar texto em um campo
clearLimpar texto de um campo
swipeDeslizar na tela
scrollRolar por direção
waitAguardar condição ou tempo
assertVerificar condição no app
extractExtrair texto ou atributo de elemento
resetReiniciar o aplicativo
backPressionar botão Voltar (Android)
homePressionar botão Home (Android)
key-eventEnviar código de tecla Android

Estratégias de Seletor Mobile

EstratégiaDescriçãoExemplo
idResource ID do elementocom.meuapp:id/login_button
accessibility_idContent description / accessibility labelBotão de login
xpathExpressão XPath na hierarquia XML//android.widget.Button[@text="Entrar"]
class_nameNome da classe nativaandroid.widget.EditText
-android uiautomatorSeletor UIAutomator2 (Android)new UiSelector().text("Entrar")
-ios predicate stringNSPredicate (iOS)type == 'XCUIElementTypeButton' AND name == 'Entrar'
-ios class chainiOS Class Chain**/XCUIElementTypeButton[\name == 'Entrar'`]`

Dica: O Inspetor Mobile gera automaticamente os seletores ao tocar nos elementos, sem necessidade de escrever XPath manualmente.


Detalhes das Ações

tap

Toca em um elemento usando estratégias de seletor.

CampoTipoDescrição
SeletoresarrayEstratégias de seletor do elemento
TentativasnumberNúmero de tentativas (padrão: 3)
Delay entre tentativas (ms)numberEspera entre tentativas (padrão: 500ms)

Caso o seletor falhe em todas as tentativas e houver coordenadas de fallback (geradas pelo inspetor), o toque será realizado nas coordenadas diretas.


tap-coords

Toca em coordenadas absolutas na tela.

CampoTipoDescrição
XnumberCoordenada X em pixels
YnumberCoordenada Y em pixels

type

Digita texto em um campo de entrada.

CampoTipoDescrição
SeletoresarrayEstratégias de seletor do campo
TextostringTexto a ser digitado (suporta {{ }})
Limpar PrimeirobooleanLimpa o campo antes de digitar
TentativasnumberNúmero de tentativas de localização

clear

Limpa o conteúdo de um campo de entrada.

CampoTipoDescrição
SeletoresarrayEstratégias de seletor do campo

swipe

Desliza na tela entre dois pontos.

CampoTipoDescrição
fromX / fromYnumberCoordenadas de início
toX / toYnumberCoordenadas de destino
Duração (ms)numberVelocidade do gesto (padrão: 350ms)
DireçãostringAlternativa: up, down, left, right
PercentualnumberPercentual da tela para deslizar (com direção)

scroll

Rola o conteúdo em uma direção.

CampoTipoDescrição
Direçãostringup, down, left, right
SeletoresarraySeletor do container a rolar (opcional)

wait

Aguarda uma condição antes de prosseguir.

CampoTipoDescrição
ModostringTipo de espera
Timeout (ms)numberTempo máximo de espera
SeletoresarraySeletores (modo elementVisible)

Modos:

ModoDescrição
timeoutAguarda um tempo fixo em milissegundos
elementVisibleAguarda um elemento aparecer na tela

assert

Verifica uma condição no aplicativo. Se falhar, o passo é marcado como falha.

CampoTipoDescrição
NomestringIdentificador da asserção (chave no output)
ModostringTipo de verificação
SeletoresarraySeletores do elemento
Texto EsperadostringValor esperado (modos text)
Continuar em FalhabooleanNão interrompe o fluxo se falhar

Modos:

ModoDescrição
elementExistsVerifica se o elemento está visível na tela
textContainsVerifica se o texto do elemento contém o valor esperado
textEqualsVerifica se o texto do elemento é exatamente o valor esperado

Os resultados das asserções ficam disponíveis nos outputs:

{{ steps["mobile-flow"].outputs.asserts.nomeAsserção }}  →  true ou false

extract

Extrai texto ou atributo de um elemento.

CampoTipoDescrição
NomestringNome da extração (chave no output)
SeletoresarraySeletores do elemento
AtributostringO que extrair: text (padrão) ou nome do atributo

Os dados extraídos ficam disponíveis nos outputs:

{{ steps["mobile-flow"].outputs.extracts.nomeExtracao }}

reset

Reinicia o aplicativo, limpando seu estado (equivalente a desinstalar e reinstalar).


back

Pressiona o botão físico/virtual Voltar (Android — keycode 4).


home

Pressiona o botão Home (Android — keycode 3).


key-event

Envia um keycode Android diretamente ao dispositivo.

CampoTipoDescrição
KeycodenumberCódigo da tecla Android (ex: 4 = BACK, 3 = HOME, 66 = ENTER)
RepetiçõesnumberQuantas vezes enviar o evento

Keycodes comuns:

KeycodeTecla
3HOME
4BACK
66ENTER
67BACKSPACE/DEL
82MENU
84SEARCH

Evidências (Screenshots)

Cada passo pode ter configuração de evidência individual:

CampoTipoDescrição
Capturar ScreenshotbooleanAtivar captura de tela
Modobefore / after / bothQuando capturar
Template de NomestringNome customizado do arquivo
Aguardar EstabilizaçãobooleanEsperar tela estável antes de capturar
Timeout de Estabilização (ms)numberTempo máximo aguardando tela estável (padrão: 2000ms)
Delay (ms)numberTempo adicional antes de capturar (padrão: 300ms)

Os screenshots gerados ficam disponíveis na aba Evidências do resultado da execução. Toques e swipes são destacados com marcação visual verde sobre o screenshot.


Outputs

OutputTipoDescrição
sessionIdstringID da sessão mobile para reutilização em outros nós
extractsobjectDados extraídos pelos passos extract (chave → valor)
assertsobjectResultados das asserções (chave → true/false)

Exemplo Completo

Login em aplicativo Android

Passos configurados no nó:

  1. wait → Modo: elementVisible, Seletor: id=com.meuapp:id/email_field (timeout: 10000ms)
  2. tap → Seletor: id=com.meuapp:id/email_field
  3. type → Seletor: id=com.meuapp:id/email_field, Texto: {{ variables.USER_EMAIL }}
  4. type → Seletor: id=com.meuapp:id/password_field, Texto: {{ variables.USER_PASSWORD }}, Limpar: true
  5. tap → Seletor: accessibility_id=Entrar
  6. wait → Modo: elementVisible, Seletor: id=com.meuapp:id/home_title (timeout: 15000ms)
  7. assert → Nome: loginOk, Modo: elementExists, Seletor: id=com.meuapp:id/home_title
  8. extract → Nome: welcomeText, Seletor: id=com.meuapp:id/welcome_message, Atributo: text

Resultado após execução:

{
  "sessionId": "minha-sessao-android",
  "extracts": { "welcomeText": "Olá, João!" },
  "asserts": { "loginOk": true }
}

Reutilizando Sessão entre Nós

Nó 1 — Mobile Flow (Login)

  • Session ID: sessao-android
  • Passos: login no app

Nó 2 — Mobile Flow (Verificar Pedido)

  • Modo de Sessão: reuse
  • Session ID: sessao-android
  • Passos: navegar para pedidos, verificar status

Ambos os nós compartilham o mesmo dispositivo e estado de sessão.


Dicas

  • Use o Inspetor Mobile para gravar passos visualmente — ele gera os seletores automaticamente ao tocar nos elementos
  • Na versão desktop, o Appium é iniciado automaticamente quando um fluxo com nó mobile é executado — não é necessário nenhuma configuração manual
  • Prefira accessibility_id como seletor principal — é mais estável que XPath e funciona em Android e iOS
  • Configure screenshots nos passos críticos para facilitar a identificação de falhas
  • Use Continuar em Falha em asserções de monitoramento para coletar múltiplos resultados sem interromper o fluxo
  • Para apps que demoram para iniciar, adicione um passo wait com elementVisible antes de interagir
  • O Session ID personalizado facilita a reutilização de sessão entre múltiplos nós Mobile Flow no mesmo fluxo