Prefácio
Endereço do artigo anterior:
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.
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.