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

Prefacio

Dirección del artículo anterior:

pywinauto: Pruebas automatizadas de aplicaciones de escritorio de Windows (2)_Blog del Rey León-Blog CSDN

Dirección del siguiente artículo:

Ninguna todavia

1. Tecnología back-end de la aplicación win

1.Documentos oficiales

Después de instalar pywinauto, ¿cómo empezar a usarlo? Primero debe decidir qué tecnología de asistencia (el backend de pywinauto) se puede utilizar con su aplicación; observe las que están en negrita.

La lista de tecnologías de asistencia compatibles con Windows es la siguiente:

(1) API Win32 (backend="win32"): el backend predeterminado actual

Funciona con MFC, VB6, VCL, controles simples de WinForms y la mayoría de las aplicaciones heredadas más antiguas.


(2) Automatización de MS UI (backend="uia")

Se aplica a WinForms, WPF, aplicaciones de la Tienda, Qt5, navegadores, etc.
Nota: Chrome requiere el indicador de comando --force-renderer-accessibility antes de iniciarse. Debido a las limitaciones de la biblioteca Python comtypes, no se admiten propiedades ni controles personalizados.

Lo anterior es la descripción del documento oficial, entonces, ¿qué debemos hacer con algunas tecnologías de diseño de aplicaciones antiguas? Como Accesibilidad Activa (MSAA), IAccessible2

Para estas tecnologías más antiguas, el soporte puede no ser muy bueno, pero puedes usar backend="win32" para acceder a ellas.

2. Un experimento sobre tecnología de asistencia back-end

Tengo una aplicación qt5, usamos win32 y uia para conectarnos e imprimir el logotipo del elemento para ver cuál es el efecto.

(1) ganar32
import time
from pywinauto.application import Application

print(1, time.time())
app = Application(backend='win32').start(r"C:\Program Files (x86)\SMoreVision\SMoreVision.exe")  # backend='uia'
time.sleep(5)
print(2, time.time())
dialog = app.window(title="SMore Vision")
print(3, time.time())
dialog.print_control_identifiers()

La información impresa es la siguiente:

1 1694663709.4932415
2 1694663715.176774
3 1694663715.176774
Identificadores de control:

Qt5152QWindowIcon - 'SMore Vision' (L240, T70, R1680, B970)
['Qt5152QWindowIcon', 'SMore Vision', 'SMore VisionQt5152QWindowIcon']
child_window(title="SMore Vision", class_name="Qt5152QWindowIcon")

Proceso finalizado con código de salida 0

(2)

Cambie backend='win32' en el código anterior a backend='uia' y la información impresa será la siguiente:

Identificadores de control:

Diálogo - 'SMore Vision' (L407, T80, R1847, B980)
['SMore VisionDialog', 'SMore Vision', 'Dialog', 'SMore Vision0', 'SMore Vision1']
child_window(title="SMore Vision", auto_id ="Formulario principal", control_type="Ventana")
   | 
   | Caja de grupo - '' (L409, T82, R1845, B124)
   | ['GroupBox', 'SMore VisionGroupBox', 'GroupBox0', 'GroupBox1', 'SMore VisionGroupBox0', 'SMore VisionGroupBox1']
   | child_window(auto_id="MainForm.widget_titleBar", control_type="Grupo")
   |
   | | Cuadro de grupo - '' (L409, T87, R547, B119)
   | | ['GrupoCuadro2',
   'SMore VisionGroupBox2'] | | child_window(auto_id="MainForm.widget_titleBar.widget_caption", control_type="Grupo")
   | |
   | | | Imagen - '' (L411, T89, R439, B117)
   | | | ['Imagen']
   | | | child_window(auto_id="MainForm.widget_titleBar.widget_caption.label_logo", control_type="Imagen")
   | | | 
   | | | Estático - 'SMore Vision' (L444, T89, R542, B117)
   | | | ['Estático', 'SMore Vision2', 'SMore VisionStatic']
   | | | child_window(title="SMore Vision", auto_id= "MainForm.widget_titleBar.widget_caption.label_title", control_type="Text")
   | | 
   | | Botón - 'Administración de dispositivos' (L593, T93, R693, B113)
   | | ['Administración de dispositivos', 'Botón de administración de dispositivos', ' Botón', 'Botón0','Botón1']
   | | child_window(title="Administración de dispositivos", 

...(aquí se omite otra información)

(3) Conclusión preliminar

Como se muestra arriba, es extremadamente importante elegir la tecnología de asistencia de back-end adecuada; de lo contrario, no se imprimirá ningún elemento de información procesable. Además, la clase impresa por win32 es Qt5152QWindowIcon, mientras que la clase impresa por uia es Dialog, por lo que los resultados del reconocimiento de elementos son diferentes en diferentes tecnologías auxiliares de back-end. En resumen, es necesario elegir la tecnología de back-end adecuada. Además, al imprimir usando la función print_control_identifiers(), si hay muchos elementos, la impresión puede tardar mucho tiempo, como 5 minutos, pero siempre que no se informe ningún error, se puede imprimir.

(4) Precauciones

Pycharm debe abrirse con derechos de administrador siempre que sea posible.

Guess you like

Origin blog.csdn.net/weixin_43431593/article/details/132872993