pywinauto: Teste automatizado de aplicativos de desktop do Windows (2)

Prefácio

Endereço do artigo anterior:

pywinauto: Teste automatizado de aplicativos de desktop do Windows (1)_pywinauto Manual chinês_Blog do Rei Leão-blog CSDN

Endereço do próximo artigo:

Nenhum ainda

1. O livro continua do capítulo anterior

No endereço do artigo anterior, mencionamos que iríamos experimentar o "appium doméstico": Airtest. A seguir está um artigo sobre o uso inicial. Claro, não publicaremos nenhum artigo sobre Airtest no futuro. Não é que não seja fácil de usar, pelo contrário, é mais integrado, por isso é bastante prático de usar. No entanto, o pywinauto em si é muito bom e mais flexível de usar. Afinal, é de nível relativamente baixo. Depende da sua escolha.

Airtest: testes automatizados de aplicativos de desktop do Windows (1)_Testes automatizados de aplicativos de desktop_Blog do Rei Leão-blog CSDN

2. Simples de usar

1. Bloco de notas operacional

from pywinauto.application import Application

app = Application().start("notepad.exe")
dialog = app.Notepad
edit = dialog.Edit  # 查找编辑框控件
edit.type_keys("Hello, World!")  # 在编辑框中输入文本
dialog.print_control_identifiers()
 (1) Resultados da operação

(2) Imprima da seguinte forma
Control Identifiers:

Notepad - '*无标题 - 记事本'    (L179, T156, R1695, B913)
['*无标题 - 记事本Notepad', 'Notepad', '*无标题 - 记事本']
child_window(title="*无标题 - 记事本", class_name="Notepad")
   | 
   | Edit - 'Hello,World!'    (L187, T207, R1687, B883)
   | ['Edit', '*无标题 - 记事本Edit']
   | child_window(title="Hello,World!", class_name="Edit")
   | 
   | StatusBar - ''    (L187, T883, R1687, B905)
   | ['StatusBar  第 1 行,第 13 列', 'StatusBar UTF-8', 'StatusBar Windows (CRLF)', '*无标题 - 记事本StatusBar', 'StatusBar', 'StatusBar 100%']
   | child_window(class_name="msctls_statusbar32")

Process finished with exit code 0
(3) Explicações relacionadas

A saída acima é o resultado da impressão de identificadores de controle (Identificadores de Controle) chamando o método print_control_identifiers(). Esses identificadores fornecem informações sobre a janela e seus subcontroles para ajudá-lo a identificá-los e operá-los com precisão. Deixe-me explicar cada parte da saída, prestando atenção especial às partes em negrito:

①Bloco de notas - '*Bloco de notas sem título' (L149, T167, R1665, B924):

O bloco de notas representa o título da janela.
*Sem título - Bloco de notas é o nome da classe da janela.
(L149, T167, R1665, B924) representa a posição das coordenadas da janela, o canto superior esquerdo (149, 167) e o canto inferior direito (1665, 924).
②['*Bloco de notas sem título', 'Bloco de notas', '*Bloco de notas sem título']:

Este é um alias para a janela e pode ser usado para fazer referência à janela em scripts.
③child_window(title="*Untitled-Notepad", class_name="Notepad"):

Esta é uma propriedade do controle, que especifica o título e o nome da classe do controle e pode ser usada para posicionar e operar esta janela com precisão.
④Editar - 'Olá, mundo!'(L157, T218, R1657, B894):

Editar representa um controle de caixa de edição de texto.
'Hello,World!' é o texto exibido na caixa de edição.
(L157, T218, R1657, B894) representa a posição das coordenadas da caixa de edição.
⑤['*Untitled-NotepadEdit', 'Editar']:

Este é um alias para a caixa de edição e pode ser referenciado em scripts.
⑥child_window(title="Olá, Mundo!", class_name="Editar"):

Esta é uma propriedade do controle de caixa de edição que especifica o título e o nome da classe do controle para que ele possa ser manipulado em scripts.
⑦StatusBar - '' (L157, T894, R1657, B916):

StatusBar representa o controle da barra de status.
'' indica que nenhum texto é exibido atualmente na barra de status.
(L157, T894, R1657, B916) indica a posição das coordenadas da barra de status.
⑧['StatusBar Windows (CRLF)', 'StatusBar 100%', 'StatusBar linha 1, coluna 13', 'StatusBar UTF-8', 'StatusBar', '*Untitled-Notepad StatusBar']:

Este é um alias para a barra de status e pode ser referenciado em scripts.
Os possíveis conteúdos de texto na barra de status são listados para que você possa operar a barra de status com base em um dos conteúdos do texto.
⑨child_window(class_name="msctls_statusbar32"):

Esta é uma propriedade do controle da barra de status que especifica o nome da classe do controle para que ele possa ser manipulado em scripts.


Resumindo, ao analisar o identificador de controle, você pode identificar os vários controles na janela, entender suas propriedades e como referenciá-los em seus scripts de automação para realizar operações correspondentes, como inserir texto, clicar em botões e assim por diante.

(4) O papel de print_control_identifiers()

pywinauto fornece atributos relacionados à interface por meio desta função, o que também significa que esses atributos estão dentro do escopo do reconhecimento pywinauto.Isso fornece grande suporte para a interface de operação, e esta função será frequentemente usada para identificá-la no futuro.

(5) Use logotipos impressos

①Por que você pode usar dialog = app.Notepad para criar objetos?

Antes de examinar esse problema, vejamos outras maneiras de criá-lo.

Para o sinalizador "Notepad - '*Untitled-Notepad' (L93, T179, R1609, B936)", em pywinauto, se você souber o título da janela ou o nome da classe, poderá usar essas informações para referenciar o objeto da janela. Por exemplo, se o título da janela for "*Untitled - Notepad", você poderá referenciar o objeto da janela assim:

dialog = app.window(title="*无标题 - 记事本")

Deve-se notar aqui que no exemplo acima, citamos "print_control_identifiers()" após escrever o texto, então o título passou a ser "*Untitled-Notepad", enquanto o título anterior era "Untitled-Notepad" "This", portanto, o título às vezes muda. Antes da mudança, o método de citação é o seguinte:

dialog = app.window(title="无标题 - 记事本")

Alternativamente, se você sabe que o nome da classe da janela é "Bloco de Notas", você pode referenciar o objeto da janela assim:

dialog = app.window(class_name="Notepad")

Para facilitar a chamada, os desenvolvedores do pywinauto projetaram o objeto para ser chamado diretamente por métodos de chamada. como:

dialog = app.Notepad

②Como usar o método edit.type_keys("Hello, World!")?

edit.type_keys("Hello, World!") é o método usado para simular a entrada do teclado no pywinauto. É usado para enviar uma sequência de texto especificada para um controle de caixa de edição (geralmente uma caixa de texto ou editor de texto) para simular a entrada de texto do teclado do usuário.

O parâmetro deste método é uma string que representa o texto a ser inserido na caixa de edição. No seu exemplo, é "Olá, mundo!".

Aqui estão algumas explicações e exemplos de uso do método type_keys:

# 基本用法:这将在 edit 对象表示的编辑框中模拟键盘输入字符串 "Hello, World!"。
edit.type_keys("Hello, World!")

# 特殊键的处理:可以使用大括号 {} 来表示特殊键,如回车、Tab 等。例如,如果你想在文本中输入回车键
edit.type_keys("Hello, World!{ENTER}")

# 控制输入速度:可以使用 set_timings() 方法来控制键盘输入的速度。例如,如果你想让输入速度慢一点
edit.set_timings(type_delay=0.1)  # 设置输入延迟为0.1秒
edit.type_keys("Hello, World!")

# 模拟组合键:可以模拟组合键,例如 Ctrl+C、Ctrl+V 等。使用 ^ 表示 Ctrl 键,+ 表示 Shift 键,% 表示 Alt 键
edit.type_keys("^a")  # 模拟按下Ctrl+A全选文本



③Existem outros métodos além de edit.type_keys("Hello, World!")?

Sim, falaremos sobre isso mais tarde. Falaremos brevemente sobre cada método agora, incluindo Application().start("notepad.exe"), que é uma forma de abrir um aplicativo. Existem muitos tipos, e não apenas Este forma de abertura, por exemplo, também pode se conectar diretamente ao aplicativo.

Acho que você gosta

Origin blog.csdn.net/weixin_43431593/article/details/132853458
Recomendado
Clasificación