Ir para o conteúdo

Aplicativos Windows

Aviso

Esses métodos são suportados apenas no sistema operacional Windows.

Usando os métodos abaixo, você poderá interagir com os elementos de um aplicativo em execução.

Para interagir com os elementos, você pode usar seletores e identificadores específicos. A tabela abaixo define os seletores que podem ser usados para se conectar a um aplicativo e filtrar um elemento.

Importante

Os atributos e propriedades de um aplicativo Windows podem ser visualizados usando ferramentas de espionagem.

Utilizando o plugin do BotCity Studio para Visual Studio Code, você tem acesso ao BotCity Windows Inspector, que possui recursos específicos para inspecionar aplicativos Windows e gerar código Python integrado com o framework de desenvolvimento.

Veja mais detalhes sobre automações de aplicativos Desktop e o uso do BotCity Windows Inspector neste tutorial.

Seletor Descrição
class_name Elementos com a classe da janela
class_name_re Elementos cuja classe corresponde a uma expressão regular
parent Elementos que são filhos deste
process Elementos em execução neste processo
title Elementos com este texto
title_re Elementos cujo texto corresponde a esta expressão regular
top_level_only Apenas elementos de nível superior (padrão = True )
visible_only Somente elementos visíveis (padrão= True)
enabled_only Somente elementos habilitados (padrão= False)
best_match Elementos com um título semelhante a este
handle O identificador do elemento a ser retornado
ctrl_index O índice do elemento filho a ser retornado
found_index O índice do elemento filho filtrado para retorna
predicate_func Um gancho fornecido pelo usuário para uma validação de elemento personalizado
active_only Somente elementos ativos (padrão= False)
control_id Elementos com este ID de controle
control_type Elementos com este tipo de controle (string; para UIAutomation elementos)
auto_id Elementos com este ID de automação (para UIAutomation elementos)
framework_id Elementos com este ID de estrutura (para UIAutomation elementos)
backend Nome de back-end para usar durante a pesquisa (padrão = None significa atual back-end ativo)

Tipo de acessibilidade da aplicação (Backend)

O tipo de back-end refere-se à tecnologia de acessibilidade suportada pelo aplicativo. Você pode escolher entre dois back-ends disponíveis:

  • Win32
  • UIA

Quando usar cada um?

Win32 é o back-end usado por padrão, é frequentemente usado para aplicações: MFC, VB6, VCL, controles simples de WinForms e aplicativos legados mais antigos.

O back-end UIA é frequentemente usado para: WinForms, WPF, aplicativos da Store, Qt5 e navegadores.

Alguns aplicativos suportam ambos os tipos, mas podem ter um desempenho diferente ao usá-los. Você pode usar as ferramentas de espionagem como referência para definir qual tipo é mais apropriado para o seu aplicativo. Veja mais detalhes neste link.

Conecte-se a um aplicativo

Você pode se conectar a uma instância de um aplicativo aberto. É possível usar uma combinação de seletores e também passar a tecnologia de acessibilidade suportada pelo aplicativo (Backend).

Observação

Além dos seletores acima, você também pode usar alguns seletores de conexão específicos:

  • process: ID do processo do alvo
  • handle: Identificador de janela do alvo
  • path: Caminho usado para iniciar a aplicação alvo
from botcity.core import Backend

app_path = "<caminho para sua aplicacao.exe>"

# Abre o aplicativo.
bot.execute(app_path)

# Conectando -se ao aplicativo usando os seletores de 'path' e 'title'.
bot.connect_to_app(Backend.WIN_32, path=app_path, title="Main Window Title")
// Ainda não implementado.

Conectando a partir de uma instância do pywinauto

Caso você já utilize a biblioteca pywinauto e já possua a instância de um aplicativo configurada no seu código, você poderá utiliza-lá em conjunto com o Framework Desktop da BotCity.

Basta passar a sua instância Application ou WindowSpecification referente ao aplicativo para a propriedade app do bot.

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

# Instanciando o DesktopBot
bot = DesktopBot()

# Iniciando o navegador através da classe 'Application' do 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 a propriedade `app` do DesktopBot utilizando essa instância criada com o pywinauto
bot.app =  chrome_app
...


# Obtendo a referência da janela principal da calculadora
calc_app = Desktop(backend="uia").Calculator
# Configurando a propriedade `app` do DesktopBot utilizando essa instância criada com o pywinauto
bot.app =  calc_app
// Ainda não implementado.

Dica

Caso você utilize essa estratégia, não será necessário utilizar o método connect_to_app.

Encontrando contextos

Você pode procurar por janelas e contextos do aplicativo, como uma janela principal ou uma mais específica.

# Procurando a janela principal.
main_window = bot.find_app_window(title_re="Main")

# Procurando por alguma janela específica.
popup_window = bot.find_app_window(title="Confirmation Window", class_name="ThunderRT6MDIForm")
//Ainda não implementado.

Encontrando elementos

Você pode procurar elementos de aplicativos usando o contexto geral ou um contexto pai encontrado anteriormente.

# Procurando por alguma janela específica.
popup_window = bot.find_app_window(title="Confirmation Window", class_name="ThunderRT6MDIForm")

# Procurando o elemento que está no contexto da janela encontrada.
btn_continue = bot.find_app_element(from_parent_window=popup_window, title="Continue", class_name="ThunderRT6CommandButton")

# Executando alguma operação com o elemento encontrado.
btn_continue.click()
// Ainda não implementado.

Dica

A facilidade de inspecionar e localizar as propriedades do elemento depende diretamente da estrutura do aplicativo.

Em alguns casos, para manter o controle da janela principal após uma ação em uma janela secundária, será necessário procurar novamente pela referência da janela principal para recuperar o controle sobre ela.

Info

O módulo Windows Applications é baseado nas funcionalidades da biblioteca pywinauto.

Veja mais detalhes sobre os métodos disponíveis para cada tipo de elemento neste link.