Python Ui Automation

python 自动化测试模块
来源:python.cn(jobs, news)
Win32 GUI自动化测试模块:
1. pywinauto:

下载链接:http://sourceforge.net/projects/pywinauto/

在线文档:http://pywinauto.googlecode.com/hg/pywinauto/docs/contents.html

邮件列表:https://lists.sourceforge.net/lists/listinfo/pywinauto-users

其它相关链接: http://code.google.com/p/pywinauto/

2. Watsup: http://www.tizmoi.net/watsup/intro.html

3. winGuiAuto: http://www.brunningonline.net/simon/blog/archives/winGuiAuto.py.html

Web 自动化测试模块
1. twill: 项目主页:http://twill.idyll.org/

2. PAMIE: 项目主页: http://pamie.sourceforge.net/

远程操作、命令行控制类的自动化测试:
1. 项目主页:http://www.noah.org/wiki/Pexpect

2. 探索Pexpect,第 1 部分:剖析 Pexpect : http://www.ibm.com/developerworks/cn/linux/l-cn-pexpect1/

3. 探索Pexpect,第 2 部分:Pexpect 的实例分析 : http://www.ibm.com/developerworks/cn/linux/l-cn-pexpect2/

  1. 来源:Be A Python Man! : ) http://www.cnblogs.com/pythonman/archive/2011/05/24/2054988.html

PyWinAuto

http://blog.csdn.net/horkychen/article/details/6324530
Pywinauto Guideline .
分类: Python/Perl 2011-04-14 23:38 1463人阅读 评论(2) 收藏 举报
目录(?)[+]

安装启动应用程序如何标识一个窗口如何标识一个控件如何操控Mouse如何发送按键信息如何操作菜单附1PyWinAuto中的主要类之静态图附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 FilesMicrosoft OfficeOFFICE11WINWORD.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"

Reference:
http://zoomquiet.org/res/s5/100826-PyTDD/py-gui-automation/