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

2023-09-14 12:03:35

前言

上一篇文章地址:

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。

更多推荐

Java源码分析(二)Double

本篇是源码分析的第二篇,上篇我们一起分析了Integer类的源码,本篇一起学习下Double类的源码,看下其实现。一、Double类图首先,相比Integer,Double类的源码只有1000+行代码。如下是Integer及其关联类/接口的类图:​通过Integer类的类图,我们总结下它的特点:Double类继承自抽象

《Linux 内核编码风格》官方手册!

这是一篇官方手册译文,分享给大家这是一个简短的文档,描述了Linux内核的首选编码风格。编码风格非常个人化,这是我必须要维护的代码(指Linux内核代码)的编码风格,对于其他项目代码,我也希望使用它。写内核代码时请至少考虑本文提出的风格。首先,我建议打印出GNU编码标准,然后不要阅读。烧掉它们,这是一个很棒的象征性动作

mariadb

1.[root@localhostsystem]#yuminstall-ymariadb-server已加载插件:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfile*base:ftp.sjtu.edu.cn*extras:ftp.sjtu.edu.c

网络安全攻防对抗之隐藏通信隧道技术整理

完成内网信息收集工作后,渗透测试人员需要判断流量是否出得去、进得来。隐藏通信隧道技术常用于在访问受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的数据传输。一、隐藏通信隧道基础知识(一)隐藏通信隧道概述一般的网络通信,先在两台机器之间建立TCP连接,然后进行正常的数据通信。在知道IP地址的情况下,可以直接发送报

Flink中的批和流

批处理的特点是有界、持久、大量,非常适合需要访问全部记录才能完成的计算工作,一般用于离线统计。流处理的特点是无界、实时,无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计。而在Flink中,一切都是由流组成的,Flink认为有界数据集是无界数据流的一种特例,离线数据是有界限的流,实时数

MySQL如何高效实现刷脏页,了解原理并学会配置

目录一、什么是刷脏页二、MySQL刷脏页的策略三、MySQL刷脏页的实现原理四、MySQL如何实现刷脏页一、什么是刷脏页在MySQL中,刷脏页是指将内存中已被修改的数据页(也称为脏页)写回到磁盘的过程。当MySQL执行数据更新操作时,会将修改后的数据先写入内存的缓存区(称为脏页),然后通过后台线程将这些脏页定期或根据一

【MySQL】专栏合集,从基础概念到调优

作者简介前言博主之前写过一个MySQL的系列,从基础概念、SQL到底层原理、优化,专栏地址:https://blog.csdn.net/joker_zjn/category_12305262.html?spm=1001.2014.3001.5482本文会是这个系列的清单,拉通来聊一聊Mysql从基础概念一直到优化的相关

爬虫 — Js 逆向案例四网易云音乐评论

目标网站:https://music.163.com/#/song?id=2054300084需求:获取评论内容,用户名案例分析1、分析网站加载方式动态加载,抓包找到目标url:https://music.163.com/weapi/comment/resource/comments/get?csrf_token=2、

VIOOVI干货分享:什么是SOP?它的六要素是什么?

什么是SOP,SOP就是标准化的作业程序。它以文档的形式,详细的描述操作人员在生产操作过程中的操作步骤和应当遵守的事项;是操作人员的操作说明书;也是检查员指导工作的依据。SOP的六要素是:物料名称和数量:生产之前,必须确认本工作岗位所需材料与准备的材料是否一致,数量是否正确,材料是否经过IQC检验。只有在所有确认无误之

Dubbo学习(一)——dubbo学习背景

文章目录前言分布式基础理论什么是分布式系统发展演变ORMMVCRPCSOARPC(远程调用)什么是RPCRPC工作原理为什么RPC要用到DubboDubbo的优势高性能可扩展性高可靠性监控和管理使用示例总结前言分布式基础理论什么是分布式系统分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统分布式系

【每日一题Day333】LC2603收集树中金币 | 拓扑排序

收集树中金币【LC2603】给你一个n个节点的无向无根树,节点编号从0到n-1。给你整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ai,bi]表示树中节点ai和bi之间有一条边。再给你一个长度为n的数组coins,其中coins[i]可能为0也可能为1,1表示节点i处有一个金币。一开始,你需

热文推荐