之前一个项目的特殊性, 以及一些操作权限上的问题,不能使用现有工具进行UI自动化。 在一些资深tester建议下决定采用Python的pywinauto模块来处理Windows控件的UI操作。

1. 首先搭建pywinauto环境。

1). 可以参考vncdotool - A command line VNC client 安装python2.7.5, Twisted 和PIL。

2). 安装elementtree(elementtree-1.2.7-20070827-preview.win32.exe) 和ctypes(ctypes-1.0.2.win32-py2.5-AMD64.msi)。

3). 安装已经下载好的pywinauto(pywinauto-0.4.2)

> cd to xxx:\pywinauto-0.4.2

> python setup.py install

目前最新的版本已经是0.5.1了。 可以参考:https://pypi.python.org/pypi/pywinauto

4). 测试下是否安装成功

> from pywinauto import application

> app = application.Application().start_("notepad")

> app.notepad.TypeKeys("%FX")

这段代码可以打开notepad'并将notepad通过使用用快捷键关闭。

2. 首先还需要一个工具: Swapy-ob 来获取控件属性

Swapy-ob 是一个可以获得控件原生的 Python 代码的工具。

3. 一些控件的基本操作

TreeView
  Click()
  Select()
ListView
  Check()
  UnCheck()
  Select()
  Note: ListView sometimes supports not good, especially do the action from lead to test machine.
Button
  Click()
  PressButton()
Edit
  SetEditText()
  SetText()
Window
  Wait()
  WaitNot()
Listbox / Combobox
  Select()
Checkbox / Radio button
  Check()
  UnCheck()
MenuItem
  MenuItem.Select()
  MenuItem.Click()
Others
  Close()
  DoubleClick()

For more info: http://pywinauto.googlecode.com/hg/pywinauto/docs/controls_overview.html#all-controls

 
4.关联一个instance
start_() – The application is not running and need to start it
connect_() – The application is already running.

For example:

app = Application()
app.start_(“c:\windows\system32\notepad.exe”)
app.connect_(title_re = ".*Notepad", class_name ="Notepad")
 

5. 调用一个窗口

a_window = app.window_(title = "Page Setup", class_name = "#32770")
也可以用handle方式来处理:
w_handle = pywinauto.findwindows.find_windows(title=u'Active Directory Users and Computers', class_name='MMCMainFrame')[0]
aduc_window = pwa_app.window_(handle=w_handle)
aduc_window.print_control_identifiers() //打印当前窗口的所有控件和属性。
 
6. TypeKeys()快捷键
SHIFT   +     
CTRL   ^     
ALT   %

空格键是SPACE

BACKSPACE   {BACKSPACE}、{BS}   or   {BKSP}     
BREAK   {BREAK}     
CAPS   LOCK   {CAPSLOCK}     

DEL   or   DELETE   {DELETE}   or   {DEL}     
DOWN   ARROW   {DOWN}     

END   {END}     
ENTER   {ENTER}   or   ~     
ESC   {ESC}     
HELP   {HELP}     
HOME   {HOME}     
INS   or   INSERT   {INSERT}   or   {INS}     
LEFT   ARROW   {LEFT}     

NUM   LOCK   {NUMLOCK}     

PAGE   DOWN   {PGDN}     

PAGE   UP   {PGUP}     
PRINT   SCREEN   {PRTSC}     

RIGHT   ARROW   {RIGHT}     

SCROLL   LOCK   {SCROLLLOCK}     

TAB   {TAB}     
UP   ARROW   {UP}     

+   {ADD}     
-   {SUBTRACT}     

*   {MULTIPLY}     

/   {DIVIDE}

7. Example for create AD user      

pwa_aduc.window_(title=u'New Object - User', class_name='#32770').Wait('exists', timeout=30, retry_interval=1)
u_window = pwa_aduc.window_(title=u'New Object - User', class_name='#32770')
u_window['First name:Edit'].Wait('enable', timeout=30, retry_interval=1)
u_window['First name:Edit'].TypeKeys(User)
u_window['User logon name:Edit0'].TypeKeys(User)
u_window['Next'].Wait('enable', timeout=30, retry_interval=1)
u_window['Next'].Click(button='left', double=False)
u_window['Password:Edit'].Wait('exists', timeout=30, retry_interval=1)
u_window['Password:Edit'].TypeKeys(Password)
u_window['Confirm password:Edit'].TypeKeys(Password)
u_window['User must change password at next logon'].UnCheck()
u_window['Next'].Wait('enable', timeout=30, retry_interval=1)
u_window['Next'].Click(button='left', double=False)
u_window['Finish'].Click(button='left', double=False)
8. 当然因为Selenium 支持 Python, 所以可以用python+pywinauto+selenium组合的方式实现Windows和Web UI的处理。
 
Helpful link:

http://pywinauto.github.io/

http://pywinauto.googlecode.com/hg/pywinauto/docs/contents.html

https://code.google.com/p/swapy/

pywinauto处理UI自动化的更多相关文章

  1. Python结合Pywinauto 进行 Windows UI 自动化

    转:Python结合Pywinauto 进行 Windows UI 自动化 https://blog.csdn.net/z_johnny/article/details/52778064 说明:Pyw ...

  2. Airtest 网易 UI 自动化工具 Airtest 浅用记录

    一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架同时也支持原生Android App 的基于元素识别的UI自动化测试.本文主要使用目 ...

  3. 网易 UI 自动化工具 Airtest 浅用记录

    一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架 同时也支持原生Android App 的基于元素识别的UI自动化测试. 本文主要使 ...

  4. UI自动化,你值得拥有

    去年春节联欢晚会,为了那张“敬业福”,全家都卯足了劲儿“咻一咻”,连节目都顾不上看了.当时我就想,要是能自动化该多好,不停点击屏幕,屏幕不疼手还疼呢,何况还不好分心,生怕错过了“敬业福”.玩“咻一咻” ...

  5. 【Android测试】UI自动化代码优化之路(临时发布, 随时删除)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5993622.html 关于UI自动化的抱怨 听过不少人这样 ...

  6. Appium UI自动化的那些梗

    @作者 彭海波 转载请注明出处 前言 由于需求的快速迭代和敏捷测试的要求,在测试过程中引入自动化成为必不可少的手段.作为一个互联网测试团队,我们自然也引入了自动化测试这个环节.在众多的测试框架中,我们 ...

  7. 洗清UI自动化鸡肋说的不白之冤

    人类文明发展的一个重要标识是工具的诞生,当人类开始制作工具来提高生产力时,就逐渐拉开了与其他生物的距离.曾在2013年,<Google如何测试软件>中提到的分层自动化金字塔,轰动业界.而在 ...

  8. 基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍

    1. 启动浏览器 前边有详细介绍启动三种浏览器的方式(IE.Chrome.Firefox): private WebDriver driver = null; private String chrom ...

  9. 移动UI自动化-Page Objects Pattern

    移动UI自动化,看起来美好,践行起来却难.做个目光短见的务实主义者.Page Objects Pattern是Selenium官方推崇的方式,最近研究写测试用例最佳实践之Page Objects,同时 ...

随机推荐

  1. 02基于注解开发SpringMVC项目(jar包,异步,request,参数传递,多选的接收,Model传参,map传参,model传参,ajax,重定向,时间日期转换)

     1 所需jar包 项目结构如下: 2 web.xml配置文件的内容如下: <?xmlversion="1.0"encoding="UTF-8"?&g ...

  2. app如何更换用户头像信息呢?不妨这样做

    对于现在的手机应用而言,要想获得更多的人的使用,就需要给用户更多的自由功能才行,这也是基于用户体验开发软件的核心思想,一切以用户为中心,想用户之所想,做用户之所需.今天我就来谈一谈刚学到的一个关于设置 ...

  3. hadoop端口使用配置总结(非常好的总结)

    转自http://www.aboutyun.com/thread-7513-1-1.html Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以 ...

  4. Nginx创建密码保护目录

    nginx 的根目录 为:/home/undoner/nginx-wwwnginx 访问地址 为:http://127.0.0.1本文实现对nginx根目录文件访问的权限控制 (1)nginx指定密码 ...

  5. 【一天一道LeetCode】#165. Compare Version Numbers

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...

  6. FND Debug Log(FND_LOG_MESSAGES)

    之前每个模块记录日志的方式都不同,都会把日志写到不同的文件中,对于User来说很麻烦,需要记住很多的配置,现在越来越多的模块使用FND Logging来存储日志,比如WIP,RCV,OAF...FND ...

  7. 从JDK源码角度看java并发线程的中断

    线程的定义给我们提供了并发执行多个任务的方式,大多数情况下我们会让每个任务都自行执行结束,这样能保证事务的一致性,但是有时我们希望在任务执行中取消任务,使线程停止.在java中要让线程安全.快速.可靠 ...

  8. ROS(indigo)机器人操作系统学习有趣丰富的Gazebo仿真示例evarobot

    一直在寻找一个示例可以将ROS学习中常用的基础内容大部分都包含进去,最好还包括Gazebo仿真, 这样即使没有硬件设备,也可以很好的学习ROS相关内容,但又必须有对应的硬件,便于后续研究. 这里,介绍 ...

  9. Linux C 下的大文件操作

    这里说的大文件指大小超过4G的文件. 在32位环境下,linux默认打开.读.写超过4G的文件会返回错误.定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效. 注意它 ...

  10. pig的grunt中shell命令不稳定,能不用尽量不用

    shell命令:mv a b   将文件a改名为b, 可如果b已经存在,比如/test文件下有a和b两个文件,执行mv a b后,b被覆盖的了.也就是/test文件下只有a. 但是mv命令在pig的g ...