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

前言

上一篇文章地址:

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

下一篇文章地址:

暂无

一、书接上回

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

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

二、简单使用

1、操作记事本 Notepad

from pywinauto.application import Applicationapp = 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.hqwc.cn/news/108685.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python自(2)切片 字典 遍历删除添加修改查询定义函数函数返回值作用域序列化异常报错urllib使用一个类型六个方法下载 视频音频图片

切片 # # 切片# s hello word# # 下标索引为0的 # print(s[0]) #h# # 左闭右开 (左是下标开始的,右是几个索引值)例如从0开始算 4个索引值 # print(s[0:4]) #hell# # 更改起始值的开始位置 # print(s[1:]) #ello word# # 下标结束位置 # p…

Ubuntu下Nginx配置ModSecurity详细思路及过程

下面是一个简介: Ubuntu是一个linux操作系统,Nginx是一个web服务器软件,ModSecurity是一款开源的web应用防火墙(江湖人称“WAF”)。 如果上面的概念没有一定的了解,下面的内容其实也能看。就是不好操作。…

短视频商城系统的技术架构与最佳实践

短视频商城系统的概念正在迅速崭露头角,它不仅融合了视频内容和电子商务,还需要一个坚固的技术架构来支持其功能。在本文中,我们将探讨构建短视频商城系统的关键技术组件以及最佳实践,并提供一些示例代码来说明这些概念。 技术架…

Vue3路由

文章目录 Vue3路由1. 载入vue-router 库2. 实例2.1 Vue.js vue-router 实现单页应用2.2 router-link创建链接2.3 router-view显示与url对应组件2.4 <router-link> 相关属性 Vue3路由 1. 载入vue-router 库 Vue.js 路由需要载入vue-router 库 安装直接下载地址&#xf…

Python web 框架web.py「简约美」

web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain, you can use it for whatever purpose with absolutely no restrictions. web.py 是一个简单而强大的 Python Web 框架。web.py 属于公共领域&#xff0c;您可以…

PostgreSQL 数据备份恢复

文章目录 PostgreSQL 备份方式SQL备份&#xff08;逻辑备份&#xff09;文件系统备份&#xff08;物理备份&#xff09;归档备份&#xff08;物理备份&#xff09; 逻辑备份&恢复物理备份&恢复&#xff08;全量&#xff09;备份恢复 物理备份&恢复&#xff08;某个…

《C++ primer》练习3.17:改写单词为大写

最近看《C primer》&#xff0c;有这样一个题目 从cin读入一组词并把它们存入一个vector 对象&#xff0c;然后设法把所有词都改写为大写形式。输出改变后的结果&#xff0c;每个词占一行。 考察 怎么输入字符串怎么存入vector对象怎么对字符串字符处理 代码 #include <i…

【Unity编辑器扩展】| Inspector监视器面板扩展

前言【Unity编辑器扩展】| Inspector监视器面板扩展一、ContextMenu和ContextMenuItem二、Custom Editors 自定义编辑器三、Property Drawer 属性绘制器总结前言 前面我们介绍了Unity中编辑器扩展的一些基本概念及基础知识,还有编辑器扩展中用到的相关特性Attribute介绍。后面…

无涯教程-JavaScript - ISPMT函数

描述 ISPMT函数计算在特定投资期间支付的利息。提供此功能是为了与Lotus 1-2-3兼容。 语法 ISPMT (rate, per, nper, pv)争论 Argument描述Required/OptionalRateThe interest rate for the investment.RequiredPerThe period for which you want to find the interest, an…

nvue文件中@click.stop失效

在nvue文件中在子元素使用click.stop失效&#xff0c;父元素的事件触发了 在uniapp开发中nvue文件是跟vue文件是不一样的&#xff0c;就比如click.stop阻止点击事件继续传播就失效了&#xff0c;这时我们需要在子元素事件中添加条件编译&#xff0c;这样就会解决这个问题 // …

(09_13)杭州站|阿里云 Serverless 技术实践营(Serverless + 大数据)开启报名!

活动简介 “Serverless 技术实战与创新沙龙 ” 是一场以 Serverless 为主题的开发者活动&#xff0c;通过一个下午的时间增进对 Serverless 技术的理解&#xff0c;快速上手,活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主&#xff0c;活动形式为…

解决: 使用html2canvas和print-js打印组件时, 出现空白页

如图所示: 当我利用html2canvas转换成图片后, 然后使用print-js打印多张图片, 会出现空白页 使用html2canvas和print-js打印组件的文章可参考这个: Vue-使用html2canvas和print-js打印组件 解决: 因为是使用html2canvas转换成图片后才打印的, 而图片是行内块级元素, 会有间隙…