pywinauto:Windows桌面应用自动化测试(三)

前言

上一篇文章地址:

pywinauto:Windows桌面应用自动化测试(二)_Lion King的博客-CSDN博客

下一篇文章地址:

暂无

一、win应用的后端技术

1、官方文档

安装了 pywinauto 后,如何开始使用呢?首先必须确定哪种辅助技术(pywinauto 的后端)可以用于你的应用程序,注意粗体部分。

在 Windows 上支持的辅助技术列表如下:

(1)Win32 API(backend="win32")- 目前的默认后端

适用于 MFC、VB6、VCL、简单的 WinForms 控件以及大多数旧的遗留应用程序


(2)MS UI Automation(backend="uia")

适用于 WinForms、WPF、Store 应用、Qt5、浏览器
注意:在启动之前,Chrome 需要 --force-renderer-accessibility 命令标志。由于 comtypes Python 库的限制,不支持自定义属性和控件。

以上是官方文档的描述,那么对于有些老的应用设计技术怎么办呢?如Active Accessibility (MSAA)、IAccessible2

对于这些比较老的技术,可能支持不是很好,但可以用backend="win32"去访问。

2、一个关于后端辅助技术的实验

我有一个qt5应用,我们分别使用win32和uia去连接,并打印元素标志,看看有什么效果。

(1)win32
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()

打印信息如下:

1 1694663709.4932415
2 1694663715.176774
3 1694663715.176774
Control Identifiers:

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

Process finished with exit code 0

(2)uia

将上述代码的backend='win32'改为backend='uia',打印信息如下:

Control Identifiers:

Dialog - 'SMore Vision'    (L407, T80, R1847, B980)
['SMore VisionDialog', 'SMore Vision', 'Dialog', 'SMore Vision0', 'SMore Vision1']
child_window(title="SMore Vision", auto_id="MainForm", control_type="Window")
   | 
   | GroupBox - ''    (L409, T82, R1845, B124)
   | ['GroupBox', 'SMore VisionGroupBox', 'GroupBox0', 'GroupBox1', 'SMore VisionGroupBox0', 'SMore VisionGroupBox1']
   | child_window(auto_id="MainForm.widget_titleBar", control_type="Group")
   |    | 
   |    | GroupBox - ''    (L409, T87, R547, B119)
   |    | ['GroupBox2', 'SMore VisionGroupBox2']
   |    | child_window(auto_id="MainForm.widget_titleBar.widget_caption", control_type="Group")
   |    |    | 
   |    |    | Image - ''    (L411, T89, R439, B117)
   |    |    | ['Image']
   |    |    | child_window(auto_id="MainForm.widget_titleBar.widget_caption.label_logo", control_type="Image")
   |    |    | 
   |    |    | Static - 'SMore Vision'    (L444, T89, R542, B117)
   |    |    | ['Static', 'SMore Vision2', 'SMore VisionStatic']
   |    |    | child_window(title="SMore Vision", auto_id="MainForm.widget_titleBar.widget_caption.label_title", control_type="Text")
   |    | 
   |    | Button - '设备管理'    (L593, T93, R693, B113)
   |    | ['设备管理', '设备管理Button', 'Button', 'Button0', 'Button1']
   |    | child_window(title="设备管理", 

...(此处省略其他信息)

(3)初步结论

如上所示,选对正确的后端辅助技术极其重要,否则没有可操作的元素的信息打印。另外,win32打印的类为Qt5152QWindowIcon,而uia打印的类为Dialog,因此元素识别的结果在不同后端辅助技术也是不一样的。综上,要求选择正确的后端技术。另外,在使用print_control_identifiers()函数打印时,如果元素很多,那么他打印的时间可能很久,如5分钟,但只要不报错,都是能打印的。

(4)注意事项

应该尽可能以管理员权限打开pycharm。

猜你喜欢

转载自blog.csdn.net/weixin_43431593/article/details/132872993