v2.0

Eventos do Navegador

Como responder aos diálogos nativos que o navegador abre durante a automação, alert(), confirm() e prompt(), sem travar o processo.

O que são diálogos nativos

alert(), confirm() e prompt() são popups do próprio navegador, não elementos da página. Não têm CSS nem posição no DOM, então nenhum Seletor os alcança, e enquanto um deles está aberto a página inteira para de responder, inclusive para a automação.

Nem sempre um clique os abre. Uma navegação que tenta sair de um formulário não salvo pode abrir uma confirmação de saída sozinha, e um script rodando na própria página pode abrir qualquer um dos três sem nenhuma interação visível.

Por que a ordem importa

Enquanto o diálogo está aberto, a etapa que o abriu (o clique, a navegação, o que for) ainda não terminou: ela só é dada como concluída depois que o diálogo é respondido. Por isso a resposta não pode vir numa etapa depois da que abre o diálogo, porque essa etapa seguinte nunca seria alcançada. Ela precisa já estar configurada antes, para a plataforma responder no instante em que o diálogo aparece.

Ordem errada × ordem certa
// Errado: a etapa de confirmação nunca é alcançada
[Clicar em Excluir]         → abre o confirm() e trava aqui
[Função: confirm(), Aceitar] → nunca executa

// Certo: a resposta já está pronta quando o diálogo abre
[Função: confirm(), Aceitar] → não toca a página, conclui na hora
[Clicar em Excluir]         → abre o confirm() e já é respondido
A etapa de diálogo não interage com a página Ela não tem Seletor porque não há nada para clicar. Configura a resposta e conclui imediatamente, é por isso que colocá-la antes da etapa que abre o diálogo não atrasa o fluxo.

Configurando a etapa

Na etapa Navegar em Tela, escolha Função: alert(), confirm() ou prompt(), conforme o diálogo esperado. Posicione essa etapa imediatamente antes daquela que efetivamente abre o diálogo (o clique no botão, a navegação, etc.).

Aba Propriedades da etapa com Navegar em Tela selecionado em Tipo de Ação do Agente
O campo Função só aparece dentro de uma etapa com Tipo de Ação Navegar em Tela.
A ordem é sempre: configurar, depois disparar Inverter a ordem não gera erro na hora de salvar o processo, mas trava a execução no diálogo. Veja Por que a ordem importa.

As três funções

alert() sem parâmetro

Diálogo de aviso simples, só com botão OK. Não existe escolha possível, então nenhum Parâmetro da Função aparece: aceitar é a única resposta.

Campo Função com alert() selecionado, sem nenhum campo adicional
Escolhida alert(), não aparece nenhum campo além do aviso de ordem.
confirm() seleção

Aparece o campo Resposta, um seletor Aceitar / Cancelar correspondendo aos botões OK e Cancelar do diálogo real.

Campo Função com confirm() selecionado e o campo Resposta com Aceitar/Cancelar
Escolhida confirm(), aparece só o campo Resposta.
prompt() texto + seleção

Dois campos: Texto a Inserir, que aceita {variável} como qualquer campo de valor da plataforma, e o mesmo campo Resposta (Aceitar / Cancelar) de confirm(). Em Cancelar, o texto não é usado, o prompt é fechado sem preencher.

Campo Função com prompt() selecionado, mostrando Texto a Inserir e o campo Resposta
Escolhida prompt(), aparecem Texto a Inserir e Resposta.

Variáveis geradas

Toda vez que um diálogo é respondido, seja por uma etapa configurada ou pelo comportamento padrão, a execução grava:

VariávelConteúdo
{dialogType}alert, confirm ou prompt
{dialogMessage}O texto que o próprio navegador exibiu no diálogo
{dialogResult}Para confirm(), true ou false. Para prompt(), o texto digitado, ou vazio se cancelado

Use essas variáveis numa etapa de Decisão logo depois, quando o fluxo precisa reagir ao conteúdo real do diálogo, por exemplo, textos de confirmação diferentes conforme o registro. Veja também Variáveis de Contexto.

Estas variáveis são automáticas e não têm a marca de dado sensível O texto do diálogo é registrado como o navegador o exibiu. A marca Dado sensível se aplica a linhas que você declara (mapeamentos, Resultados, Variáveis do Fluxo), não a variáveis geradas sozinhas. Se o site pode exibir dado pessoal num diálogo, isso ficará no log: considere o conteúdo do diálogo ao decidir quem terá acesso à Trilha de Auditoria.

Diálogo não modelado

Um diálogo pode abrir sem nenhuma etapa alert()/confirm()/prompt() configurada antes, por exemplo, um confirm() de saída de página disparado por uma navegação que ninguém previu. Nesse caso o processo não trava esperando: a plataforma aplica uma resposta padrão automaticamente (alert() aceito, confirm() e prompt() cancelados) e registra a ocorrência no log da execução, com o texto do diálogo e a resposta aplicada.

Esse padrão é uma rede de segurança, não um substituto para modelar os diálogos esperados. Só a etapa configurada permite escolher Aceitar de propósito ou preencher um prompt().

Exemplo prático

Confirmar uma exclusão

Excluir um registro que pede confirmação
[Navegar em Tela] Função: confirm(), Aceitar
        ↓
[Navegar em Tela] Função: Seletor, clica em ".btn-excluir"
        // o confirm() abre e já é respondido com Aceitar

Preencher um prompt com uma variável

Justificativa pedida pela própria página
[Navegar em Tela] Função: prompt()
  Texto a Inserir: {motivo_cancelamento}
  Aceitar / Cancelar: Aceitar
        ↓
[Navegar em Tela] Função: Seletor, clica em "#btn-cancelar-pedido"
        // o prompt() abre e já recebe o texto de {motivo_cancelamento}

Boas práticas

Checklist Coloque a etapa de diálogo sempre imediatamente antes da que o dispara, nunca depois. Dê um nome descritivo à etapa (ex.: "Confirmar Exclusão"), facilita ler o fluxo no canvas. Quando o mesmo clique pode abrir textos diferentes de diálogo, combine com {dialogMessage} numa Decisão em vez de assumir sempre o mesmo texto. Não conte com o comportamento padrão para um diálogo que o processo realmente precisa responder de um jeito específico, modele a etapa.