pywinauto: Pruebas automatizadas de aplicaciones de escritorio de Windows (2)

Prefacio

Dirección del artículo anterior:

pywinauto: Pruebas automatizadas de aplicaciones de escritorio de Windows (1)_pywinauto manual chino_Blog del Rey León-blog CSDN

Dirección del siguiente artículo:

Ninguna todavia

1. El libro continúa desde el capítulo anterior.

En la dirección del artículo anterior, mencionamos que probaríamos el "appium doméstico": Airtest. El siguiente es un artículo sobre el uso inicial. Por supuesto, no publicaremos ningún artículo sobre Airtest en el futuro. No es que no sea fácil de usar, al contrario, está más integrado, por lo que en realidad es bastante cómodo de usar. Sin embargo, pywinauto en sí es muy bueno y más flexible de usar. Después de todo, es de nivel relativamente bajo. Depende de su elección.

Airtest: Prueba automatizada de aplicaciones de escritorio de Windows (1)_Prueba automatizada de aplicaciones de escritorio_Blog del Rey León-blog CSDN

2. Fácil de usar

1. Operar el Bloc de notas

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 de la operación

(2) Imprima de la siguiente manera
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) Explicaciones relacionadas

El resultado anterior es el resultado de imprimir identificadores de control (Identificadores de control) llamando al método print_control_identifiers(). Estos identificadores proporcionan información sobre la ventana y sus subcontroles para ayudarle a identificarlos y operarlos con precisión. Permítanme explicar cada parte del resultado, prestando especial atención a las partes en negrita:

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

El Bloc de notas representa el título de la ventana.
*Sin título: Bloc de notas es el nombre de clase de la ventana.
(L149, T167, R1665, B924) representa la posición de coordenadas de la ventana, la esquina superior izquierda (149, 167) y la esquina inferior derecha (1665, 924).
②['*Bloc de notas sin título', 'Bloc de notas', '*Bloc de notas sin título']:

Este es un alias para la ventana y puede usarse para hacer referencia a la ventana en scripts.
③child_window(title="*Bloc de notas sin título", class_name="Bloc de notas"):

Esta es una propiedad del control, que especifica el título y el nombre de clase del control y se puede utilizar para posicionar y operar con precisión esta ventana.
④Editar - '¡Hola mundo!' (L157, T218, R1657, B894):

Editar representa un control de cuadro de edición de texto.
"¡Hola, mundo!" es el texto que se muestra en el cuadro de edición.
(L157, T218, R1657, B894) representa la posición de coordenadas del cuadro de edición.
⑤['*Sin título-Bloc de notasEdit', 'Editar']:

Este es un alias para el cuadro de edición y se puede hacer referencia a él en los scripts.
⑥child_window(title="¡Hola, mundo!", class_name="Editar"):

Esta es una propiedad del control del cuadro de edición que especifica el título y el nombre de la clase del control para que pueda manipularse en scripts.
⑦Barra de estado - '' (L157, T894, R1657, B916):

StatusBar representa el control de la barra de estado.
'' indica que actualmente no se muestra ningún texto en la barra de estado.
(L157, T894, R1657, B916) indica la posición de las coordenadas de la barra de estado.
⑧['StatusBar Windows (CRLF)', 'StatusBar 100%', 'StatusBar fila 1, columna 13', 'StatusBar UTF-8', 'StatusBar', '*Untitled-Notepad StatusBar']:

Este es un alias para la barra de estado y se puede hacer referencia a él en los scripts.
Los posibles contenidos de texto en la barra de estado se enumeran para que pueda operar la barra de estado basándose en uno de los contenidos de texto.
⑨child_window(class_name="msctls_statusbar32"):

Esta es una propiedad del control de la barra de estado que especifica el nombre de clase del control para que pueda manipularse en scripts.


En resumen, al analizar el identificador de control, puede identificar los distintos controles en la ventana, comprender sus propiedades y cómo hacer referencia a ellos en sus scripts de automatización para realizar las operaciones correspondientes, como ingresar texto, hacer clic en botones, etc.

(4) El papel de print_control_identifiers()

Pywinauto proporciona atributos relacionados con la interfaz a través de esta función, lo que también significa que estos atributos están dentro del alcance del reconocimiento de pywinauto, lo que proporciona un gran soporte para la interfaz operativa y esta función se utilizará a menudo para identificarla en el futuro.

(5) Utilice logotipos impresos

①¿Por qué puedes usar dialog = app.Notepad para crear objetos?

Antes de analizar este problema, veamos otras formas de crearlo.

Para la bandera "Bloc de notas - '*Untitled-Notepad' (L93, T179, R1609, B936)", en pywinauto, si conoce el título de la ventana o el nombre de clase, puede usar esta información para hacer referencia al objeto de la ventana. Por ejemplo, si el título de la ventana es "*Sin título - Bloc de notas", puede hacer referencia al objeto de la ventana de esta manera:

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

Cabe señalar aquí que en el ejemplo anterior, citamos "print_control_identifiers()" después de escribir el texto, por lo que el título pasó a ser "*Untitled-Notepad", mientras que el título anterior era "Untitled-Notepad" "This", por lo tanto, el título a veces cambia. Antes del cambio, el método de citación es el siguiente:

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

Alternativamente, si sabe que el nombre de la clase de la ventana es "Bloc de notas", puede hacer referencia al objeto de la ventana de esta manera:

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

Para facilitar las llamadas, los desarrolladores de pywinauto diseñaron el objeto para que se llame directamente mediante métodos de llamada. como:

dialog = app.Notepad

②¿Cómo utilizar el método edit.type_keys ("¡Hola, mundo!")?

edit.type_keys("¡Hola, mundo!") es el método utilizado para simular la entrada del teclado en pywinauto. Se utiliza para enviar una cadena de texto específica a un control de cuadro de edición (generalmente un cuadro de texto o un editor de texto) para simular la entrada de texto por parte del teclado del usuario.

El parámetro de este método es una cadena que representa el texto que se ingresará en el cuadro de edición. En su ejemplo, es "¡Hola mundo!".

Aquí hay algunas explicaciones y ejemplos de uso del 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全选文本



③¿Existen otros métodos además de edit.type_keys ("¡Hola, mundo!")?

Sí, hablaremos de ello más adelante. Hablaremos brevemente de cada método ahora, incluido Application().start("notepad.exe"), que es una forma de abrir una aplicación. Hay muchos tipos, y no solo Esto. La forma de apertura, por ejemplo, también puede conectarse directamente a la aplicación.

Supongo que te gusta

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