Pywinauto Guideline

http://blog.csdn.net/horkychen/article/details/6324530

 

有奖征集活动系列——【HTML5游戏编程之旅】          专访贺炘:软件测试应讲究策略和方法    低价抢购开源中国论坛门票     CSDN博客第一期云计算最佳博主评选     Intel Perceptual Camera体验之旅 

分类:            Python/Perl2011-04-14 23:38 1760人阅读 评论(2) 收藏 举报

安装

1.安装Python

2.下载SendKeys并安装 (http://pypi.python.org/pypi/SendKeys )

setup.py --install

3.下载pywinauto并安装 (http://pypi.python.org/pypi/pywinauto/0.4.0 )

setup.py --install

4. 研究pywinauto包中的文档及例子

启动应用程序

            gWORD2003 = ur"C://Program Files//Microsoft Office//OFFICE11//WINWORD.EXE"

app = application.Application()

            app.start_(gWORD2003)

           

连接到已运行的应用程序

            app = application.Application().connect_(title_re = AppName)

如何标识一个窗口

1.      使用窗口标题

gWizardStr = “Wizard”

MainDlg = app[gWizardStr]

窗口标题也可以直接当成一个变量形式使用 (不建议):

MainDlg = app.Wizard

2.      使用正则表达式匹配

dlg= app.window_(title_re=".* Page Setup", class_name ="#32770")

3.      直接取最上层窗口

MainDlg=app.top_window_()

如何标识一个控件

            匹配的顺序为:

a.       Title

b.      Friendly class

c.       Title + Friendly class

使用Title比较简单,如控制Next按钮,下面两种方式有相同的功能:

    Dialog.Next.Click()

    Dialog[“Next”].Click()

Friendly class对于一般的控件比较简单,如:

  Dialog.Button1.Click()

  Dialog.ComboBox1.Select(1)

注意Button,Button0及Button1都是代表第一个Button. 关于顺序,也要注意如果存在嵌入窗口,则其内部的子控件顺序是依据其在主窗口的顺序而定的。所以使用如下打印出所有控件的标识很有帮助:

    WindowSpecification.print_control_identifiers()

对于自定义的控件,Friendly class 可以通过Visual Studio带的Spy++来查看:

相应的代码为:

canvas = pwin.Afx100000008

如何操控Mouse

示例:

def AdjustSizeOnPreview(WizardDlg,ShiftX,ShiftY):

            Offset = 10

            OrgRect = WizardDlg.WiaPreviewControl1.Rectangle()

            WizardDlg.WiaPreviewControl1.PressMouse(coords = (Offset,Offset))

            WizardDlg.WiaPreviewControl1.MoveMouse(coords = (Offset+ShiftX,Offset+ShiftY))

            WizardDlg.WiaPreviewControl1.ReleaseMouse()

如何发送按键信息

            Pywinauto使用SendKeys来进行按键处理,可以参考:

            http://www.rutherfurd.net/python/sendkeys/

1.      发送快捷键

  MainWin.TypeKeys("%F") #按Alt+F

Key

Meaning

+

SHIFT

^

CTRL

%

ALT

多个按键时可以使用间隔时间:

MainWin.TypeKeys("%IPS",pause=0.5) #在Word2003打开从扫描仪导入图片的窗口

注意,TypeKeys并不是安全地将按键发送到目标窗口,所以尽量减少使用或者

测试时减小其它操作干扰。

            2. 使用SendMessage实现

如何操作菜单

如果窗口有指定菜单项,则可以很容易地使用它:

pwin.MenuSelect("File->Open")

有时菜单项是用来勾选,并不能直接响应事件,则可以使用如下方式:

sMenu=App[Title].MenuItem("File->Save")

sMenu.Click()

*上面的例子针对有些MenuItem并不会响应MenuSelect()方法。

*有些Application并不会将菜单项指定给主UI,如Word,这样就不能直接使用菜单方法,而是使用快捷键的方式。下图是Word主UI的展开:

1.PyWinAuto中的主要类之静态图

2.枚举窗口所有控件及菜单项

def ShowMenuItems(MenuItem,Tabs=""):

if None==MenuItem:

    return

Tabs = Tabs+"/t"

for menu in MenuItem.Items():

    if(2048!=menu.Type()):

                print Tabs,menu.Text()," [ID:",menu.ID(),"]"

    subMenu=menu.SubMenu()

    if None != subMenu:

                ShowMenuItems(subMenu,Tabs)

def ShowMenuAndControls(app):

for win in app.Windows_():

                        print "Dialog:",win.WindowText()

                        print "Position:",win.Rectangle()

                       

                        ShowMenuItems(win.Menu());

                       

                        if 0<len(win.Children()):

                                    for control in win.Children():

                                                print "Control ID:",control.ControlID()

                                                print "/t Control Type:",control.FriendlyClassName()

                                                print "/t TEXT:",control.WindowText()

                                                print "/t RECT:",control.Rectangle()

                                                if control.IsEnabled():

                                                            print "/t Status:Enabled"

                                                else:

                                                            print "/t Status:Disabled"

                                                if control.IsVisible():

                                                            print "/t Status:Visible"

                                                else:

                                                            print "/t Status:Unvisible"                  

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值