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。

相关推荐
Lion King2 个月前
pywinauto:Windows桌面应用自动化测试(七)
ui自动化
Lion King2 个月前
pywinauto:Windows桌面应用自动化测试(六)
ui自动化
Codebill4 个月前
RunnerGo V4.6.0 新增功能介绍
自动化测试·测试工具·性能测试·ui自动化·loadrunner·runnergo
AE—Darren洋9 个月前
全新ui自动化测试框架教学——Cypress
自动化测试·测试工具·ui自动化·cypress
京东云开发者1 年前
浅谈仓储UI自动化之路
测试·ui自动化·分层测试
我是冯朗1 年前
macos搭建appium-iOS自动化测试环境
macos·appium·mac·wda·ui自动化