zoukankan      html  css  js  c++  java
  • pywinauto处理UI自动化

    之前一个项目的特殊性, 以及一些操作权限上的问题,不能使用现有工具进行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:windowssystem32 otepad.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/

  • 相关阅读:
    Django 数据库常用字段类型、选项参数、外键约束
    Django 项目基础配置
    MySQL连接列值
    SQL 限制查询结果
    python+appium+真机测试
    P3089 [USACO13NOV]POGO的牛Pogo-Cow
    P2889 [USACO07NOV]挤奶的时间Milking Time
    P2679 子串
    P3932 浮游大陆的68号岛
    P1514 引水入城
  • 原文地址:https://www.cnblogs.com/daly/p/4682043.html
Copyright © 2011-2022 走看看