pywinauto 使用
2021-05-03 15:28
标签:star 场景 测试 div packages 顺序 proc 下载 定义 win32窗体、控件进行各种操作,不再使用以往录制-修改代码的方式。 例如以下的例子(以下代码均在英文操作系统上测试通过: 在以上的例子中,总共只有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的安装非常容易,此处略过。 2 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 关联到一个应用,用以下方法: 以下是示例代码 3.2 调用一个窗体 当初始化app后,可以通过模糊匹配的方式操作该app中的一个窗体,变量名可以是该窗体标题的部分或全部 例如,对一个写字板app应用中的窗口,在英文操作系统中,其标题是“untitled - Notepad” 可以使用以下两种方式调用该窗体 对于关于窗口,其标题是“About Notepad” 可以使用以下名称调用该窗体 3.3 调用一个控件 Pywinauto使用以下顺序定位一个控件 1: 控件的标题,即title 2:控件的类名,即friendly class 3:控件的标题加类名,即title + friendly class 对于“关于”窗口的中按钮,可以使用以下任意一种方式调用 如果在写字板中输入文字,执行退出时会 弹出询问窗口,对于其中的“不保存按钮”,其英文标题是Don’t Save,按照上面的规律,可以使用以下任意一方式调用该按钮,即 以上无论DontSave、DoSave、DotSave都是标题Dont’ Save的一部分,pywinauto都可以通过模糊匹配的方式找到该按钮。 3.4 控件的基本操作 如下: 其中TypeKeys()支持组合键,例如 Ctrl: ^ Alt: % Shift: + 以下是其常见属性的读取: 如果想了解详细,可以查看pywinauto的官方文档,其链接是 http://pywinauto.googlecode.com/hg/pywinauto/docs/controls_overview.html 在该网页里,最上方是所有控件的基本操作和属性读取,下面依次是每个控件独有的操作,在实际的编程中,如果想知道某个控件的某个操作,可以通过文档查询。 4 其它说明 4.1 和PyUnit集成 只要代码书写符合PyUnit的要求,可以很容易的让pywinauto所测试的win32应用和PyUnit集成。 4.2 和Selenium集成 Selenium支持Python语言,因此,很容易让pywinauto与selenium。 在一些测试场景中,需要运行完某个win32应用后,立刻在web应用程序中查看结果,也就是说,一个测试同时要面对win32和web两种应用,可以用python+pywinauto+selenium组合的方式实现。 4.3 代码结构 有兴趣的网友,还可以阅读其源代码,主要的几个程序是 pywinauto 使用 标签:star 场景 测试 div packages 顺序 proc 下载 定义 原文地址:http://www.cnblogs.com/colin2012/p/7744048.html
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"
)
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)
dlg = app.window_(title_re = ".*Part of Title.*")
dlg = app.PartOfTitle
app.Untitled
app.Notepad
app.AboutNotepad
app.AboutNotepad.OK
app.AboutNotepad.Button1
app.AboutNotepad.OKButton
app.Notepad.DontSave
app.Notepad.DoSave
app.Notepad.DotSave
Control.Click()
#点击
Control.MenuSelect()
#菜单选择
Control.PressMouse
/
MoveMouse
/
ReleaseMouse()
#按、移动、释放鼠标
Control.TypeKeys()
#键入字符
ControlID()
FriendlyClassName()
WindowText()
Rectangle()
IsEnabled()
IsVisible()
Application.py:与app相关
Findwindows.py:窗体的查找
Timings.py:各种操作的时间间隔设置
win32_controls.py:普通控件的访问
common_controls.py:TreeView
/
ListView...等控件的访问
Menuwrapper.py:菜单的访问