python 操作 windows 控件
python 操作 windows 控件
这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官方的文档,发现这个东西使用起来还真是非常方便,下面我也以notepad为例来说明一下它的简单操作。
安装
.ctypes (如果你是python2.或者2.4)
检测你是否安装正确
>>> from pywinauto import application
>>> app = application.Application.start()
>>> TypeKeys(%FX)
都安装好了以后,我们来正式进入pywinauto的世界
一、启动程序
from pywinauto import application
app = application.Application.start( )
start() 函数里也可以接路径程序名
使用spylite查看notepad的信息
里面的窗口类名与标题文本相关重要,以后的查窗口基本上都要用的到
现在我们来点击“帮助->关于记事本”操作
MenuSelect( 帮助->关于记事本 .decode( gb212 ))
这里的app是你刚才实例的对象,otepad是类名,可以从spylite中看到,MenuSelect方法可以自动检索otepad上的菜单选项,
decode(‘gb212’)方法是把中文强制转换为unicode编码,对于非英文的操作系统都是要转换的,后面还有更简单的方法
二、查“关于记事本”的窗口
还是使用spylite来查看“关于记事本”的信息
窗口类名:#2770
标题文字:关于“记事本”
官方法文档中有以下两个方法
1. 通过top_dlg = _window_() 来获得最上面的window,但是官方并不推荐这种方式,目前来说这个“关于记事本”是最上面,但是也不能保证在测试的进程当中有什么意外的进程跑到了上面,一旦有新的进程,那么得到的就是一个错误的对象
2.通过find_dlg = app.window_(title_re = ‘’, class_name = ‘’) 方法获得,这也是为什么我上面说标题文本与窗口类名非常重要的原因,title_re和 class_name这两个可以单独使用也可以一块使用,因为有时没有标题文本,也有时一个窗口类名有多个对象,比如“Edit”有时当一个对话框中有多个输入框时会有多个Edit类名,对于“关于记事本”我们可以通过以下代码获得
about_dlg = app.window_(title_re = u关于, class_name = #2770)
中文要进行unicode编码,这里也可以通过decode(‘gb212’)方法实现,但是不如输入一个U省事~ 呵呵
我们print一下得到的about_dlg
说明我们得到的是一个application.WindowSpecification对象
三、在”关于记事本”窗口上到“确定”按钮(button)
在pywinauto中,对话框下面的是controller,button,checkbox,textbox等都是controller
我们可以使用print_control_identifiers() 方法来打印出该窗口中所有的controller
about_dlg.print_control_identifiers()
会得到以下的输出
Control Identifiers:
Static - (L12, T265, R78, B267)
0 1 Static Static0 Static1
Static - (L08, T280, R40, B1)
2 Static2
Static - Microsoft Windows (L50, T280, R695, B295)
Microsoft Windows Microsoft WindowsStatic Static
Static - \u7248\u672c 6.1 (\u5185\u90e8\u7248\u672c 7601: Service Pack 1) (L50, T295, R748, B10)
Static4 \u7248\u672c 6.1 (\u5185\u90e8\u7248\u672c 7601: Service Pack 1) \u7248\u672c 6.1 (\u5185\u90e8\u7248\u672c 7601: Service Pack 1)Static
Static - \u7248\u674\u6240\u6709 \xa9 2009 Microsoft Corporation\u002\u4fdd\u7559\u6240\u6709\u674\u5229\u002 (L50, T10, R710, B25)
Static5 \u7248\u674\u6240\u6709 \xa9 2009 Microsoft Corporation\u002\u4fdd\u7559\u6240\u6709\u674\u5229\u002 \u7248\u674\u6240\u6709 \xa9 2009 Microsoft Corporation\u002\u4fdd\u7559\u6240\u6709\u674\u5229\u002Static
Static - Windows 7 \u65d7\u820\u7248 \u64cd\u4f5c\u7cfb\u7edf\u5ca\u5176\u7528\u627\u754c\u9762\u5d7\u7f8e\u56fd\u548c\u5176\u4ed6\u56fd\u5bb6/\u570\u5a\u7684\u5546\u6807\u6cd5\u548c\u5176\u4ed6\u5f85\u9881\u5e0\u6216\u5df2\u9881\u5e0\u7684\u77e5\u8bc6\u4ea7\u674\u6cd5\u4fdd\u62a4\u002 (L50, T25, R710, B85)
Static6 Windows 7 \u65d7\u820\u7248 \u64cd\u4f5c\u7cfb\u7edf\u5ca\u5176\u7528\u627\u754c\u9762\u5d7\u7f8e\u56fd\u548c\u5176\u4ed6\u56fd\u5bb6/\u570\u5a\u7684\u5546\u6807\u6cd5\u548c\u5176\u4ed6\u5f85\u9881\u5e0\u6216\u5df2\u9881\u5e0\u7684\u77e5\u8bc6\u4ea7\u674\u6cd5\u4fdd\u62a4\u002 Windows 7 \u65d7\u820\u7248 \u64cd\u4f5c\u7cfb\u7edf\u5ca\u5176\u7528\u627\u754c\u9762\u5d7\u7f8e\u56fd\u548c\u5176\u4ed6\u56fd\u5bb6/\u570\u5a\u7684\u5546\u6807\u6cd5\u548c\u5176\u4ed6\u5f85\u9881\u5e0\u6216\u5df2\u9881\u5e0\u7684\u77e5\u8bc6\u4ea7\u674\u6cd5\u4fdd\u62a4\u002Static Windows 7 \u65d7\u820\u7248 \u64cd\u4f5c\u7cfb\u7edf\u5ca\u5176\u7528\u627\u754c\u9762\u5d7\u7f8e\u56fd\u548c\u5176\u4ed6\u56fd\u5bb6/\u570\u5a\u7684\u5546\u6807\u6cd5\u548c\u5176\u4ed6\u5f85\u9881\u5e0\u6216\u5df2\u9881\u5e0\u7684\u77e5\u8bc6\u4ea7\u674\u6cd5\u4fdd\u62a4\u002Static0 Windows 7 \u65d7\u820\u7248 \u64cd\u4f5c\u7cfb\u7edf\u5ca\u5176\u7528\u627\u754c\u9762\u5d7\u7f8e\u56fd\u548c\u5176\u4ed6\u56fd\u5bb6/\u570\u5a\u7684\u5546\u6807\u6cd5\u548c\u5176\u4ed6\u5f85\u9881\u5e0\u6216\u5df2\u9881\u5e0\u7684\u77e5\u8bc6\u4ea7\u674\u6cd5\u4fdd\u62a4\u002Static1
Static - (L50, T85, R665, B415)
Static7 Windows 7 \u65d7\u820\u7248 \u64cd\u4f5c\u7cfb\u7edf\u5ca\u5176\u7528\u627\u754c\u9762\u5d7\u7f8e\u56fd\u548c\u5176\u4ed6\u56fd\u5bb6/\u570\u5a\u7684\u5546\u6807\u6cd5\u548c\u5176\u4ed6\u5f85\u9881\u5e0\u6216\u5df2\u9881\u5e0\u7684\u77e5\u8bc6\u4ea7\u674\u6cd5\u4fdd\u62a4\u002Static2
SysLink - \u689\u66e Microsoft \u8f6f\u4ef6\u8bb8\u5ef\u6761\u6be\uff0c\u672c\u4ea7\u54c1\u4f7f\u7528\u674\u5c5e\u4e8e: (L50, T415, R665, B445)
SysLink \u689\u66e Microsoft \u8f6f\u4ef6\u8bb8\u5ef\u6761\u6be\uff0c\u672c\u4ea7\u54c1\u4f7f\u7528\u674\u5c5e\u4e8e: \u689\u66e Microsoft \u8f6f\u4ef6\u8bb8\u5ef\u6761\u6be\uff0c\u672c\u4ea7\u54c1\u4f7f\u7528\u674\u5c5e\u4e8e:SysLink
Static - kevin (L65, T445, R680, B460)
Static8 kevin kevinStatic kevinStatic0 kevinStatic1
Static - (L65, T460, R680, B475)
Static9 kevinStatic2
Button - \u786e\u5b9a (L672, T50, R747, B524)
Button \u786e\u5b9a \u786e\u5b9aButton
static,SysLink,button等是它类型,后面接的是title,都是unicode的,这里面就有没有title的controller,再后面的(L,T,R,B)是这个控件的位置,分别对应着左上右下
在”关于记事本”窗口上到“确定”按钮,可以通过app.window_()方法,传入的参数可以是title,也可以是class_name,所以我说这两个值相当重要,一直在用,这里的title支持正则表达式,非常方便
在app上先到about_dlg,然后再about_dlg上确定button
app.window_(title_re = u 关于“记事本” ).window_(title_re = u 确定 ),然后通过Click()方法来单击这个button
另外一种方法也是官方推荐的在非英文系统下的方法
OK = u 确定
about_dlg[OK].Click()
这个的意思就是在about_dlg下到u’确定’,看起来比上面要简练好理解,理解了这种方式,接下来还有更简单的,都不用about_dlg
直接 app[u 关于“记事本” ][u 确定 ].Click()
四、在记事本里写点东西
这个其实在校验pywinauto的时候已经做过了全用TypeKeys函数,但是这里如果要输入中文还是要u一下
TypeKeys(u杨彦星)
五、一个比较恶心的问题
在MenuSelect函数中不支持正则,完全是全文匹配,如我输入
dig = MenuSelect(编辑->替换.decode( gb212 )) 是不到对象的
必须要
dig = MenuSelect(编辑(E)->替换(R).decode( gb212 )) 这样才行,得把(R) (E)写上才行,但是奇怪的是上面的“帮助->关于记事本”就不用输入,所以说是一个挺恶心的问题,我也不知道这是为什么……
最后把上面的函数合并一下,跑下来应该会很快
#! /usr/bin/env python
#coding=gbk
import time
from pywinauto import application
app = application.Application.start( )
MenuSelect( 帮助->关于记事本 .decode( gb212 ))
time.sleep(.5)
#这里有两种方法可以进行定位“关于记事本”的对话框
#top_dlg = _window_() 不推荐这种方式,因为可能得到的并不是你想要的
about_dlg = app.window_(title_re = u关于, class_name = #2770)#这里可以进行正则匹配title
#about_dlg.print_control_identifiers()
app.window_(title_re = u 关于“记事本” ).window_(title_re = u 确定 ).Click()
MenuSelect( 帮助->关于记事本 .decode( gb212 ))
time.sleep(.5) #停0.5s 否则你都看不出来它是否弹出来了!
ABOUT = u 关于“记事本”
OK = u 确定
#about_dlg[OK].Click()
#app[ABOUT][OK].Click()
app[u 关于“记事本” ][u 确定 ].Click()
TypeKeys(u杨彦星)
dig = MenuSelect(编辑(E)->替换(R).decode( gb212 ))
Replace = u 替换
Cancle = u 取消
time.sleep(.5)
app[Replace][Cancle].Click()
dialogs = app.windows_()
先写这么多,以后再写点更多的应用~
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:SEER数据打卡day1
下一篇:html入门基础知识及常用标签
推荐阅读
留言与评论(共有 19 条评论) |
本站网友 市长 | 29分钟前 发表 |
T85 | |
本站网友 朔州美食 | 18分钟前 发表 |
一个比较恶心的问题在MenuSelect函数中不支持正则,完全是全文匹配,如我输入dig = MenuSelect(编辑->替换.decode( gb212 )) 是不到对象的必须要dig = MenuSelect(编辑(E)->替换(R).decode( gb212 )) 这样才行,得把(R) (E)写上才行,但是奇怪的是上面的“帮助->关于记事本”就不用输入,所以说是一个挺恶心的问题,我也不知道这是为什么……最后把上面的函数合并一下,跑下来应该会很快#! /usr/bin/env python#coding=gbkimport timefrom pywinauto import applicationapp = application.Application.start( )MenuSelect( 帮助->关于记事本 .decode( gb212 ))time.sleep(.5)#这里有两种方法可以进行定位“关于记事本”的对话框#top_dlg = _window_() 不推荐这种方式,因为可能得到的并不是你想要的about_dlg = app.window_(title_re = u关于 | |
本站网友 jiubo | 10分钟前 发表 |
B25) Static5 \u7248\u674\u6240\u6709 \xa9 2009 Microsoft Corporation\u002\u4fdd\u7559\u6240\u6709\u674\u5229\u002 \u7248\u674\u6240\u6709 \xa9 2009 Microsoft Corporation\u002\u4fdd\u7559\u6240\u6709\u674\u5229\u002Static Static - Windows 7 \u65d7\u820\u7248 \u64cd\u4f5c\u7cfb\u7edf\u5ca\u5176\u7528\u627\u754c\u9762\u5d7\u7f8e\u56fd\u548c\u5176\u4ed6\u56fd\u5bb6/\u570\u5a\u7684\u5546\u6807\u6cd5\u548c\u5176\u4ed6\u5f85\u9881\u5e0\u6216\u5df2\u9881\u5e0\u7684\u77e5\u8bc6\u4ea7\u674\u6cd5\u4fdd\u62a4\u002 (L50 | |
本站网友 雪梨银耳汤 | 25分钟前 发表 |
在记事本里写点东西这个其实在校验pywinauto的时候已经做过了全用TypeKeys函数,但是这里如果要输入中文还是要u一下TypeKeys(u杨彦星)五 | |
本站网友 海口写字楼 | 9分钟前 发表 |
然后再about_dlg上确定buttonapp.window_(title_re = u 关于“记事本” ).window_(title_re = u 确定 ),然后通过Click()方法来单击这个button另外一种方法也是官方推荐的在非英文系统下的方法OK = u 确定 about_dlg[OK].Click()这个的意思就是在about_dlg下到u’确定’,看起来比上面要简练好理解,理解了这种方式,接下来还有更简单的,都不用about_dlg直接 app[u 关于“记事本” ][u 确定 ].Click()四 | |
本站网友 医保卡的使用 | 29分钟前 发表 |
python 操作 windows 控件 这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官方的文档,发现这个东西使用起来还真是非常方便,下面我也以notepad为例来说明一下它的简单操作 | |
本站网友 三井 | 26分钟前 发表 |
class_name = ‘’) 方法获得,这也是为什么我上面说标题文本与窗口类名非常重要的原因,title_re和 class_name这两个可以单独使用也可以一块使用,因为有时没有标题文本,也有时一个窗口类名有多个对象,比如“Edit”有时当一个对话框中有多个输入框时会有多个Edit类名,对于“关于记事本”我们可以通过以下代码获得about_dlg = app.window_(title_re = u关于 | |
本站网友 强剑 | 22分钟前 发表 |
B10) Static4 \u7248\u672c 6.1 (\u5185\u90e8\u7248\u672c 7601 | |
本站网友 茂名房产 | 6分钟前 发表 |
也可以是class_name | |
本站网友 伊丽莎白鼠 | 4分钟前 发表 |
Service Pack 1) \u7248\u672c 6.1 (\u5185\u90e8\u7248\u672c 7601 | |
本站网友 山外有山人外有人 | 22分钟前 发表 |
B10) Static4 \u7248\u672c 6.1 (\u5185\u90e8\u7248\u672c 7601 | |
本站网友 中国成功 | 30分钟前 发表 |
T | |
本站网友 黑豆怎么吃最好 | 10分钟前 发表 |
B524) Button \u786e\u5b9a \u786e\u5b9aButton static,SysLink | |
本站网友 山药胡萝卜排骨汤 | 18分钟前 发表 |
R680 | |
本站网友 森马代言人 | 30分钟前 发表 |
B524) Button \u786e\u5b9a \u786e\u5b9aButton static,SysLink | |
本站网友 笑场 | 8分钟前 发表 |
python 操作 windows 控件 这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官方的文档,发现这个东西使用起来还真是非常方便,下面我也以notepad为例来说明一下它的简单操作 | |
本站网友 七星聚首 | 9分钟前 发表 |
查“关于记事本”的窗口还是使用spylite来查看“关于记事本”的信息窗口类名:#2770标题文字:关于“记事本”官方法文档中有以下两个方法1. 通过top_dlg = _window_() 来获得最上面的window,但是官方并不推荐这种方式,目前来说这个“关于记事本”是最上面,但是也不能保证在测试的进程当中有什么意外的进程跑到了上面,一旦有新的进程,那么得到的就是一个错误的对象2.通过find_dlg = app.window_(title_re = ‘’ | |
本站网友 狐狸眼 | 1分钟前 发表 |
T445 |