当前位置:首页 > Windows程序 > 正文

用pywinauto进行win32应用程序的测试

2021-03-27 Windows程序

之前做win32应用测试时,用过很多大家耳熟成详的工具,接触pywinauto之前,对它的了解也不多,然而,随着对它了解的增多,发现它借助了python动态对象的能力,使得代码即便于书定,也便于阅读,而且功能非常强大,最重要的一点,就是它以一种比较优雅的方式对win32窗体、控件进行各种操作,不再使用以往录制-修改代码的方式。

例如以下的例子(以下代码均在英文操作系统上测试通过:

1

2

3

4

5

 

from pywinauto import application

app = application.Application.start("notepad.exe")

app.Notepad.MenuSelect("Help->About Notepad")

app.AboutNotepad.OK.Click()    

app.Notepad.MenuSelect("File->Exit")    

 

在以上的例子中,总共只有5行代码,便可以执行注释中的各项操作。其最大的亮点出自第三行开始,其变量Notepad没有定义和声明,拿来就可以用,同样,第四行的AboutNotepad以及它后面的OK都是这样被调用。

如果在英文操作系统下,运行以上代码,可以清楚的看到软件工作的全部过程。

看到这里,大家会问,上面说的这些变量是怎么来的?为什么就可以被调用呢?

这就是pywinauto的特色,它先通过app获得某应用程序的句柄,然后用“模糊匹配”的方式去查找对应的窗口和控件,以上的例子中,由于写字板的标题是Untitled – Notepad,所以便可以用标题里的一部分,也就是Notepad去访问它,同样,用Untitled也可以。

同时,在写字板的“关于”窗口中,那个关闭按钮的标题是“OK”,所以便可以用OK去调用它。

讲了这么多,现在具体介绍pywinauto的安装和使用

1 安装

1.1安装python

安装pywinauto有两个要求:

1: python的版本不得高于2.6

2:使用python的32位版本

因此,建议大家去python官网下载其32位的python2.6并进行安装。

1.2安装依赖库

Pywinauto有两个依赖库,即

SendKeys-ctypes

SendKeys

可以去其对应网站下载、安装,也可以从本文的附件中下载,稍后会加上该附件。

说明,以上两个库以下pywinauto都有setup.py程序,用户可以在DOS命令下,运行python setup.py install进行安装,安装成功后,这些库会出现在python的安装目录的Lib\site-packages下。

1.3 安装pywinauto

只要python符合安装要求(前面说的32位,低于2.7),且安装依赖库,pywinauto的安装非常容易,此处略过。

python的开发环境(可选)

我使用Eclipse+PyDev插件进行python的开发。

具体的配置方法是

1: 下载PyDev

2: 解压,将解压后的两个文件夹features、plugins拷贝到Eclipse的dropins目录下

3:启动Eclipse,点击菜单windows->Preferences,弹出的窗口左侧应该出现PyDev节点

4:点击PyDev下的Interpreter-Python,点击New按钮,找到Python.exe的安装路径,然后点击两次确定按钮即可。

5:此时可以新建Python工程、模块,可以在Eclipse进行Python的开发和调试。

3 Pywinauto使用

3.1 关联到一个应用,用以下方法:

start_(path)

connect_(handle or processID)

 

以下是示例代码 

app = Application() app.start_(“notepad.exe”) app.connect_(path = r"c:\windows\system32\notepad.exe") app.connect_(process = 2341) app.connect_(handle = 0x010f0c)

3.2 调用一个窗体

当初始化app后,可以通过模糊匹配的方式操作该app中的一个窗体,变量名可以是该窗体标题的部分或全部

dlg = app.window_(title_re = ".*Part of Title.*") dlg = app.PartOfTitle

例如,对一个写字板app应用中的窗口,,在英文操作系统中,其标题是“untitled - Notepad”

可以使用以下两种方式调用该窗体

app.Untitled app.Notepad

对于关于窗口,其标题是“About Notepad”

可以使用以下名称调用该窗体

app.AboutNotepad

 

3.3 调用一个控件

Pywinauto使用以下顺序定位一个控件

1: 控件的标题,即title

2:控件的类名,即friendly class

3:控件的标题加类名,即title + friendly class

对于“关于”窗口的中按钮,可以使用以下任意一种方式调用

app.AboutNotepad.OK

app.AboutNotepad.Button1

app.AboutNotepad.OKButton

 

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68582.html