Saltar a contenido

Aplicaciones de Windows

Warning

Estos métodos solo son compatibles con el sistema operativo Windows.

Utilizando los métodos a continuación, podrás interactuar con los elementos de una aplicación en ejecución.

Para interactuar con los elementos, puedes utilizar selectores e identificadores específicos. La tabla a continuación define los selectores que se pueden utilizar para conectarse a una aplicación y filtrar un elemento.

Info

Los atributos y propiedades de una aplicación de Windows pueden ser visualizados utilizando herramientas de espionaje.

Usando el plugin de BotCity Studio para Visual Studio Code, tienes acceso al BotCity Windows Inspector, que cuenta con características específicas para inspeccionar aplicaciones de Windows y generar código Python integrado con el marco de desarrollo.

Consulta más detalles sobre automatizaciones de aplicaciones Desktop y el uso del BotCity Windows Inspector en este tutorial.

Selector Descripción
class_name Elementos con esta clase de ventana
class_name_re Elementos cuya clase coincide con esta expresión regular
parent Elementos que son hijos de este elemento
process Elementos en ejecución en este proceso
title Elementos con este texto
title_re Elementos cuyo texto coincide con esta expresión regular
top_level_only Solo elementos de nivel superior (valor predeterminado=True)
visible_only Solo elementos visibles (valor predeterminado=True)
enabled_only Solo elementos habilitados (valor predeterminado=False)
best_match Elementos con un título similar a este
handle El identificador del elemento a devolver
ctrl_index El índice del elemento secundario a devolver
found_index El índice del elemento secundario filtrado a devolver
predicate_func Un gancho proporcionado por el usuario para una validación personalizada del elemento
active_only Solo elementos activos (valor predeterminado=False)
control_id Elementos con este ID de control
control_type Elementos con este tipo de control (cadena; para elementos de UIAutomation)
auto_id Elementos con este ID de automatización (para elementos de UIAutomation)
framework_id Elementos con este ID de marco (para elementos de UIAutomation)
backend Nombre del backend a utilizar durante la búsqueda (el valor predeterminado None significa el backend activo actual)

Backend

El tipo de backend se refiere a la tecnología de accesibilidad compatible con la aplicación. Puedes elegir entre dos backends disponibles:

  • Win32
  • UIA

¿Cuándo usar cada uno?

El backend Win32 se utiliza de forma predeterminada y a menudo se utiliza para aplicaciones como MFC, VB6, VCL, controles simples de WinForms y la mayoría de las aplicaciones antiguas.

El backend UIA se utiliza a menudo para aplicaciones como WinForms, WPF, aplicaciones de la Tienda, Qt5 y navegadores.

Algunas aplicaciones admiten ambos tipos, pero pueden comportarse de manera diferente al usarlos. Puedes utilizar las herramientas de espionaje como referencia para determinar qué tipo es más adecuado para tu aplicación. Obtén más detalles en este enlace.

Conectar a una aplicación

Puedes conectarte a una instancia de una aplicación abierta. Es posible utilizar una combinación de selectores y también pasar la tecnología de accesibilidad compatible con la aplicación (Backend).

Note

Además de los selectores mencionados anteriormente, también puedes utilizar algunos selectores de conexión específicos:

  • process: ID de proceso del objetivo
  • handle: Identificador de ventana del objetivo
  • path: Ruta utilizada para iniciar el objetivo
from botcity.core import Backend

app_path = "<path to the application .exe>"

# Opens the app.
bot.execute(app_path)

# Connecting to the application using the 'path' and 'title' selectors.
bot.connect_to_app(Backend.WIN_32, path=app_path, title="Main Window Title")
// Aún no implementado.

Conectando a partir de una instancia del pywinauto

Si ya utilizas la biblioteca pywinauto y ya tienes la instancia de una aplicación configurada en tu código, podrás usarla junto con el Framework Desktop de BotCity.

Basta con pasar tu instancia Application o WindowSpecification referente a la aplicación a la propiedad app del bot.

from botcity.core import DesktopBot, Backend
from pywinauto.application import Application
from pywinauto import Desktop

# Creación de instancias de DesktopBot
bot = DesktopBot()

# Iniciando el navegador a través de la clase 'Application' del pywinauto
chrome_path = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'
chrome_app = Application(backend='uia').start(
    chrome_path + ' --force-renderer-accessibility ''https://<URL>'
)
# Configurando la propiedad `app` del DesktopBot utilizando esta instancia creada con el pywinauto
bot.app =  chrome_app
...


# Obteniendo la referencia de la ventana principal de la calculadora
calc_app = Desktop(backend="uia").Calculator
# Configurando la propiedad `app` del DesktopBot utilizando esta instancia creada con el pywinauto
bot.app =  calc_app
// Aún no implementado.

Tip

Si utilizas esta estrategia, no será necesario utilizar el método connect_to_app.

Buscar contextos

Puedes buscar ventanas y contextos de la aplicación, como una ventana principal o una más específica.

# Searching for the main window.
main_window = bot.find_app_window(title_re="Main")

# Searching for some specific window.
popup_window = bot.find_app_window(title="Confirmation Window", class_name="ThunderRT6MDIForm")
// Aún no implementado.

Buscar elementos

Puedes buscar elementos de la aplicación utilizando el contexto general o un contexto principal encontrado previamente.

# Searching for some specific window.
popup_window = bot.find_app_window(title="Confirmation Window", class_name="ThunderRT6MDIForm")

# Searching for the element that is in the context of the found window.
btn_continue = bot.find_app_element(from_parent_window=popup_window, title="Continue", class_name="ThunderRT6CommandButton")

# Performing some operations with the found element.
btn_continue.click()
// Aún no implementado.

Tip

La facilidad de inspeccionar y localizar las propiedades del elemento depende directamente de la estructura de la aplicación.

En algunos casos, para mantener el control de la ventana principal después de una acción en una ventana secundaria, será necesario buscar nuevamente la referencia de la ventana principal para recuperar el control sobre ella.

Info

El módulo Windows Applications se basa en las funcionalidades de la biblioteca pywinauto.

Consulta más detalles sobre los métodos disponibles para cada tipo de elemento en este enlace.