前言
上一篇文章地址:
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")这种打开应用的方式,还分很多种类型,而且不止这种打开方式,比如也能直接连接应用。