Ir al contenido

Desktop Activities

Versión: 1.0.0  ·  ID: zoan-packages-desktop  ·  Autor: Zoan Software

El paquete Desktop automatiza aplicaciones de escritorio de Windows: programas instalados como un ERP, un sistema contable, una aplicación bancaria de escritorio o cualquier app de Windows. El bot interactúa con sus ventanas y controles —botones, campos, listas, tablas— igual que una persona con el teclado y el mouse.

Por debajo usa UI Automation (UIA3), la tecnología de accesibilidad de Windows, que le permite “ver” los controles de una aplicación de forma fiable (no por coordenadas de pantalla, sino por el elemento real). También soporta aplicaciones Java de escritorio.

Para automatizar una app primero hay que conectarse a su ventana. Tienes dos piezas:

  • Open App: lanza la aplicación (si no está abierta) y devuelve su identificador de proceso (PID).
  • Win Attach: se conecta a una ventana y devuelve una sesión (ZoanDesktopSession).

Como en Browser, hay dos formas de trabajar con la sesión:

Las actividades dentro del body heredan la sesión automáticamente; no configuras session en ninguna.

Win Attach selector = (ventana "Calculadora")
└─ body:
Win Click selector = (botón "5")
Win Click selector = (botón "+")
Win Get Text selector = (display) → output: resultado

Win Attach guarda la sesión en una variable; cada actividad la recibe en session, y al final cierras con Win Close.

Win Attach selector = (ventana "ERP") → output: app
Win Type session = = app selector = (campo "Usuario") text = "admin"
Win Close session = = app

Como en el navegador, un selector identifica el control con el que actuar (este botón, aquel campo). Lo capturas con UI Discover, señalando el elemento con el mouse; Zoan guarda una referencia robusta basada en las propiedades UIA del control (su controlType, name, automationId…), que sobrevive a cambios de posición o tamaño de la ventana.

Concepto 3: métodos de interacción (UIA vs físico)

Sección titulada «Concepto 3: métodos de interacción (UIA vs físico)»

Varias actividades ofrecen dos formas de actuar sobre un control, y conviene entender la diferencia:

AcciónMétodo “UIA” (por defecto)Método “físico”
Win Clickinvoke — activa el control por su patrón UIA. Fiable, no necesita que la ventana esté visible.mouse — mueve el mouse y hace clic real.
Win Typevalue — asigna el texto por el patrón Value de UIA. Rápido y seguro.simulate — simula pulsaciones de teclado.

Empieza con el método por defecto (invoke/value): es más fiable. Cambia al físico (mouse/simulate) solo si un control “rebelde” no responde al UIA (algunos controles personalizados o que validan cada tecla).

ActividadTipoSalidaQué hace
Open Appopen-appnumberLanza una aplicación y devuelve su PID
Win Attachwin-attachZoanDesktopSessionSe conecta a una ventana
Win Focuswin-focusTrae una ventana al frente
Win Closewin-closeCierra la ventana y libera la sesión
ActividadTipoSalidaQué hace
Win Clickwin-clickHace clic en un elemento
Win Typewin-typeEscribe texto en un campo
Win Set Valuewin-set-valueAsigna el valor de un campo (patrón Value)
Win Checkwin-checkMarca/desmarca un checkbox o radio
Win Selectwin-selectSelecciona un ítem de un combo/lista
Win Key Presswin-key-pressEnvía una tecla o combinación
Win Scrollwin-scrollDesplaza un elemento con scroll
ActividadTipoSalidaQué hace
Win Get Textwin-get-textstringTexto o valor de un elemento
Win Get Attributewin-get-attributeobjectUna propiedad del elemento (enabled, value…)
Win List Itemswin-list-itemsstring[]Ítems disponibles de un combo/lista
Win Element Existswin-element-existsboolean¿Existe y es visible el elemento?
Win Extract Tablewin-extract-tableDataTableExtrae una tabla/grid a una DataTable
ActividadTipoSalidaQué hace
Win Wait Forwin-wait-forbooleanEspera a que un elemento aparezca o desaparezca
Win Screenshotwin-screenshotCaptura la ventana o un elemento a un archivo

Abrir un sistema, iniciar sesión y leer un dato:

Open App path = "C:/ERP/erp.exe" → output: pid
Win Attach selector = (ventana "ERP — Login")
└─ body:
Win Type selector = (campo "Usuario") text = = credential("erp")["user"]
Win Type selector = (campo "Clave") text = = credential("erp")["password"]
Win Click selector = (botón "Ingresar")
Win Wait For selector = (ventana "ERP — Inicio") state = visible
Win Get Text selector = (etiqueta "Saldo") → output: saldo