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

news2024/11/27 19:37:02

前言

上一篇文章地址:

pywinauto:Windows桌面应用自动化测试(一)_pywinauto中文手册_Lion King的博客-CSDN博客

下一篇文章地址:

暂无

一、书接上回

在上一篇文章地址中,我们提到去试用一下 “国产appium”: Airtest,以下是初步使用的文章,当然,后续也不会发关于Airtest文章了。不是说不好用哈,相反,集成度高了一些,所以用起来其实也挺方便。只不过,pywinauto本身就很不错了,用起来更灵活一些,毕竟相对底层,看大家选择吧。

Airtest:Windows桌面应用自动化测试(一)_桌面应用程序自动化测试_Lion King的博客-CSDN博客

二、简单使用

1、操作记事本 Notepad

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)运行结果

(2)打印如下
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)相关解释

上面的输出是通过调用 print_control_identifiers() 方法来打印控件标识符(Control Identifiers)的结果。这些标识符提供了有关窗口及其子控件的信息,以帮助你准确地识别和操作它们。让我解释一下输出中的每个部分,并特别注意粗体部分:

①Notepad - '*无标题 - 记事本' (L149, T167, R1665, B924):

Notepad 表示窗口的标题。
*无标题 - 记事本 是窗口的类名。
(L149, T167, R1665, B924) 表示窗口的坐标位置,左上角 (149, 167) 和右下角 (1665, 924)。
②['*无标题 - 记事本Notepad', 'Notepad', '*无标题 - 记事本']:

这是窗口的别名,可以用于在脚本中引用窗口。
③child_window(title="*无标题 - 记事本", class_name="Notepad"):

这是控件的属性,指定了控件的标题和类名,可以用于精确定位和操作这个窗口。
④Edit - 'Hello,World!' (L157, T218, R1657, B894):

Edit 表示文本编辑框控件。
'Hello,World!' 是编辑框中显示的文本。
(L157, T218, R1657, B894) 表示编辑框的坐标位置。
⑤['*无标题 - 记事本Edit', 'Edit']:

这是编辑框的别名,可以在脚本中引用它。
⑥child_window(title="Hello,World!", class_name="Edit"):

这是编辑框控件的属性,指定了控件的标题和类名,以便在脚本中操作它。
⑦StatusBar - '' (L157, T894, R1657, B916):

StatusBar 表示状态栏控件。
'' 表示状态栏中当前没有显示任何文本。
(L157, T894, R1657, B916) 表示状态栏的坐标位置。
⑧['StatusBar Windows (CRLF)', 'StatusBar 100%', 'StatusBar 第 1 行,第 13 列', 'StatusBar UTF-8', 'StatusBar', '*无标题 - 记事本StatusBar']:

这是状态栏的别名,可以在脚本中引用它。
列出了状态栏中的可能文本内容,以便你可以根据其中一个文本内容来操作状态栏。
⑨child_window(class_name="msctls_statusbar32"):

这是状态栏控件的属性,指定了控件的类名,以便在脚本中操作它。


总之,通过分析控件标识符,你可以识别窗口中的各个控件,了解它们的属性,以及如何在你的自动化脚本中引用它们,从而执行相应的操作,例如输入文本、点击按钮等等。

(4)print_control_identifiers()的作用

pywinauto通过这个函数提供了界面的相关属性,这也意味着这些属性都是在pywinauto识别范围的,这对操作界面提供了非常大的支持,以后都会经常使用该函数去识别。

(5)使用打印的标志

①为什么可以使用 dialog = app.Notepad 创建对象?

在了解这个问题前,我们先看看其他创建方式。

对于标志“Notepad - '*无标题 - 记事本'    (L93, T179, R1609, B936)”,在pywinauto中,如果你知道窗口的标题或类名,你可以使用这些信息来引用窗口对象。例如,如果窗口的标题是 "*无标题 - 记事本",你可以这样引用窗口对象:

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

这里需要注意一下,我们在上面的例子中,引用“print_control_identifiers()”是在写入文本后的,因此标题变成了"*无标题 - 记事本",而之前的标题是"无标题 - 记事本",因此,标题有时候是会变的,在变之前的引用方式如下:

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

或者,如果你知道窗口的类名是 "Notepad",你可以这样引用窗口对象:

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

为了方便调用,pywinauto开发者设计了可以直接通过调用方法的方式对对象进行调用。如:

dialog = app.Notepad

②edit.type_keys("Hello, World!")的方法是怎么使用的?

edit.type_keys("Hello, World!") 是 pywinauto 中用于模拟键盘输入的方法。它用于将指定的文本字符串发送到一个编辑框控件(通常是一个文本框或文本编辑器),以模拟用户键盘输入文本的操作。

这个方法的参数是一个字符串,表示要输入到编辑框的文本。在你的示例中,它是 "Hello, World!"。

下面是关于 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全选文本



③除了edit.type_keys("Hello, World!")还有其他方法么?

有的,后续我们会讲到,现在每用一个方法,我们就会简单讲到,包括Application().start("notepad.exe")这种打开应用的方式,还分很多种类型,而且不止这种打开方式,比如也能直接连接应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1008681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一博 - 闲聊 Session、cookie、 JWT、token、SSO、 OAuth 2.0

文章目录 概述图解图解 OAuth2.0 概述 当谈到网络应用程序的身份验证和会话管理时,以下是一些重要的概念: Session(会话): 会话是一种服务器端的数据存储机制,用于跟踪用户与网站的交互。每当用户访问网站…

《PostgreSQL数据分区:原理与实战》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

第7章 【MySQL】B+树索引的使用

InnoDB存储引擎的B树索引: 每个索引都对应一棵 B 树, B 树分为好多层,最下边一层是叶子节点,其余的是内节点。所有 用户记录都存储在 B 树的叶子节点,所有 目录项记录 都存储在内节点。InnoDB 存储引擎会自动为主键&a…

Mac 安装ZooKeeper+kafka基本使用

为什么 Kafka 依赖 ZooKeeper? 下面ZooKeeper基本介绍: 1、基本功能 ZooKeeper 为分布式系统提供了一种配置管理的服务:集中管理配置,即将全局配置信息保存在 ZooKeeper 服务中,方便进行修改和管理,省去了手动拷贝…

【AIGC】服务于人类|一种新的人工智能技术

文章目录前言 一、AIGC的自我介绍 二、AIGC八大领头羊——生成式人工智能八大领头羊 1.Character.AI 2.Open AI 3.Midjourney 4.Stability AI 5.Tome 6.Anthropic 7.Hugging Face 8.Jasper 三、AIGC用来干嘛? 四、AIGC当今弊端 4.1 法律法规完善程度低 4.2 数据要素…

二叉树进阶练习

目录 一、根据二叉树创建字符串 二、二叉树的最近公共祖先 三、二叉搜索树与双向链表 四、从前序与中序遍历序列构造二叉树 五、从中序与后序遍历序列构造二叉树 六、二叉树的前序遍历(非递归实现) 七、二叉树的中序遍历(非递归实现&a…

免杀对抗-Python-混淆算法+反序列化-打包生成器-Pyinstall

Python-MSF/CS生成shellcode-上线 cs上线 1.生成shellcode-c或者python 2.打开pycharm工具,创建一个py文件,将原生态执行代码复制进去 shellcode执行代码: import ctypesfrom django.contrib.gis import ptr#cs#shellcodebytearray(b"生…

RocketMQ整体架构及NameServer源码分析

RocketMQ源码深入剖析 1 RocketMQ介绍 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术,自主研发的云正式商用的专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠…

无涯教程-JavaScript - ISLOGICAL函数

描述 如果指定的值或表达式的计算输出为逻辑值,即True或False,则ISLOGICAL函数将返回逻辑值TRUE。否则返回FALSE。 语法 ISLOGICAL (value)争论 Argument描述Required/OptionalvalueValue or expression.Required Notes 您可以在执行计算之前使用此功能测试单元格的内容。…

《机器学习核心算法》分类算法 - 朴素贝叶斯 MultinomialNB

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 朴素贝叶斯 1、朴素贝叶斯API2、朴素贝叶斯算法实际应用2.1、获取数据集2.2、划分…

【译】怎样修改 HashMap 的 Key?

原文地址:https://www.baeldung.com/java-hashmap-modify-key 1. 概述 在 Java 中,HashMap 是一个广泛使用的数据结构,它以键值对的形式存储元素,提供快速的数据访问和检索。有时,在使用 HashMap 时,我们…

【算法题】1222. 可以攻击国王的皇后

题目: 在一个 8x8 的棋盘上,放置着若干「黑皇后」和一个「白国王」。 给定一个由整数坐标组成的数组 queens ,表示黑皇后的位置;以及一对坐标 king ,表示白国王的位置,返回所有可以攻击国王的皇后的坐标(…

重启人生,重新出发

Hello, World! 我是EarlGrey,这是时隔两年多后在公众号第一次发文。也许有些老朋友已经忘记我了,也有少数朋友是最近才开始关注的,所以谈正题之前,我先花点时间介绍一下自己。 我是谁 我是英语专业出身,从北外高翻毕业…

使用 SimPowerSystems 的混合技术风电场的无功功率管理(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

什么是 JxBrowser

什么是 JxBrowser 文章目录 什么是 JxBrowser如何使用 JxBrowser容易集成支持的平台Java丰富的文档如何运行主要功能值得信赖成熟的专业技术团队及时的支持与帮助参考资料 JxBrowser 是一个商业跨平台 Java 库,可以让您将基于 Chromium 的网页浏览器控件集成到您的 …

【ES实战】ES中关于segment的小结

文章目录 ES中关于segment的小结ES中segment相关的原理在Lucene中的产生segment的过程。(Lucene commit过程)ES为了实现近实时可查询做了哪些缩短数据可被搜索的等待时长增加数据的可靠性优化segment的数量 段合并自动合并强制合并 相关配置translog合并…

Python 学习之路 03 之循环

😀前言 欢迎来到 Python 循环和流程控制的基础教程!无论您是一名新手,还是希望复习 Python 编程的基本知识,这个教程都是一个非常好的资源。在这份教程中,我们将探索 Python 中的不同循环结构和流程控制机制&#xff0…

火山引擎DataWind产品可视化能力揭秘

引言 BI是商业智能(Business Intelligence)的缩写,是一种将企业中现有的数据进行有效的整合的平台,它可以帮助企业、组织和个人更好地了解其业务状况、发现问题,并进行决策。BI产品普遍采用可视化的方式,可以帮助用户更直观、更高…

快速傅里叶变换

引言 目标 傅里叶变化(Fourier transform)是一种信号处理技术,它可以将时间信号转换为频率信号,即将一组具有相同数量频率的正弦波叠加在一起,形成一组新的正弦波。如果我们把时间信号从频域转换到时域,那么…

Drupal __ 8.5.0 __ XSS文件上传 __CVE-2019-6341

Drupal __ 8.5.0 __ XSS文件上传 __CVE-2019-6341 说明内容漏洞编号CVE-2019-6341漏洞名称Drupal XSS漏洞漏洞评级中危影响范围在7.65之前的Drupal 7版本中; 8.6.13之前的Drupal 8.6版本; 8.5.14之前的Drupal 8.5版本。漏洞描述Drupal诞生于2000年,是一…