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:\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/

时间: 2024-11-08 22:08:32

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

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

一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架 同时也支持原生Android App 的基于元素识别的UI自动化测试. 本文主要使用目的是做安卓原生App的元素UI自动化. 二 资源索引 官方资源 网易游戏新开源的 UI 自动化测试项目 [Airtest Project] Airtest官网 Airtest官网上手教程 AirtestProject Github主页 AirtestIDE官方中文文档 Airtest 官方中文文

The Thinking of AutomaticTest(有关UI自动化的思考)

考虑因素: 容易维护 简洁易懂 代码重用性好 系统的稳定性强 UI自动化: 数据的获取:装载的数据文件类型.数据的形式.数据的解析方法定义. 1.利用Junit单元测试组织用例,明确输入数据.预期结果 2.建一张输入数据参数表,不断循环调用 页面的元素:页面元素的分页.元素的获取方式 .元素的存取方式 1.当页面元素较少时,直接获取元素 2.当页面元素较多时,从配置文件中获取元素 定位页面元素的方法:定义一个统一的方法,比如对点击事件的封装: public static void unifyCl

selenium-java,解决一些加了显性等待和隐性等待都不好使的情况,以及给UI自动化加上暂停功能

最近在UI自动化时遇到了,上一步成功操作后没有响应的情况(动画加载和浏览器加载导致实际没有问题),导致下一步无法成功操作,所有想在尝试2次操作后再次进行上一步操作解决这种情况导致的错误(其实是不想每一次有问题都要手动加线程沉睡) 1.java应用程序,暂停/开始按钮 import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionL

【Android测试】UI自动化代码优化之路(临时发布)

关于UI自动化的抱怨 听过不少人这样讲 "UI自动化非常不稳定,需求一改,界面一遍,全部都费了".我相信做过的人可能也会有同感.既然这个问题一直都是存在的,那么为什么没有人仔细分析原因呢? 我的老板georgeliao举了这样一个例子:每当需求变化的时候,开发没有跳起来,反而是测试跳了起来.然后不断的抱怨,界面元素全都改了,我的自动化的用例全部都要废弃掉了.那么我们是否想过,为什么开发可以从容不破的应对产品不断变化的需求?而我们却不能呢? 业内不少人也都放弃了UI自动化,觉得接口测试才

UI自动化,你值得拥有

去年春节联欢晚会,为了那张“敬业福”,全家都卯足了劲儿“咻一咻”,连节目都顾不上看了.当时我就想,要是能自动化该多好,不停点击屏幕,屏幕不疼手还疼呢,何况还不好分心,生怕错过了“敬业福”.玩“咻一咻”,是靠不停点击按钮来检查是否得到“敬业福”,而工作中的UI自动化,大抵也和“咻一咻”差不多,都是通过不断地输入,验证系统的输出是否正确.然而做UI自动化,效果并不好,收益低就算了,执行速度还慢.比如打开一个浏览器,可能就要等3-5秒,如果等浏览器访问网址,返回网页内容,就需要更长的时间.要是遇到问题

Robot FrameWork UI自动化脚本稳定性与原生关键字

在执行robotframework  的用例时,经常会出现稳定性差的问题.用例执行第一次成功,执行第二次就可能报错.自己对这个问题挠头很久,不知道怎么解决.今天在浏览网页的时候发现了一个不错的帖子,好像能够解决这个稳定性的问题.然后就把贴子搬了过来,为自己做一下备份(看了人家的帖子后,发现原来还是自己对robotframework的关键字用的不够熟悉造成的?(????ω????)?). 众所周知,在UI自动化在运行时,时常会收到来自各方的挑战:开发会说,你的自动化不稳定,又误报了:测试会说,这个

接口自动化与UI自动化两者的可行性

1.首先接口测试是跳过前端界面对服务端的测试,UI测试是对前端界面的测试,从分层测试的角度考虑,两者不应该是可以互相取代的关系. 2.从公司开展自动化的的角度考虑,可以重点关注这个项目开展接口自动化和UI自动化的分别需要的时间消耗.自动化测试人员成本.项目开展自动化测试的可行性.接口自动化和UI自动化的投入产出比,最终来确定开展接口自动化和UI自动化的比重. 3.从自动化测试覆盖率和难易程度来考虑,一般来说,系统中可测试的接口数量要比前端界面的功能点要少,并且接口的改动频率比前端界面改动频率低,

[python]RobotFramework自定义库实现UI自动化

1.安装教程 环境搭建不多说,网上资料一大堆,可参考https://www.cnblogs.com/puresoul/p/3854963.html,写的比较详细,值得推荐.目前python3是不支持ride的所以,用python2 2.创建一个工程 &工程下有哪些目录,这样放文件比较明确,如下 &创建好,这时候就得写脚本主题是UI自动化,所以用selenium库,还有其他得辅助库 ,cd c:\Python27\Scripts\,执行easy_install pip, 安装好pip后dos

关于UI自动化代码的优化

最近对UI自动化有很深的兴趣,所以拿出了昨天的代码继续进行修改. 首先是引入了unittest框架来使用例更加规范化, 但是遇到问题:用例运行完整,但是unittest框架会报错ResourceWarning.暂时并未找到具体报错的原因. 查询资料也只找到了一个治标不治本的办法就是引入warning框架来忽略掉报错. 第二就是利用HtmlTestRunner生成测试报告,一直无法生成. 然后发现,pycharm不就有现成的生成报告的按钮么,一点就可以建立且界面也更加美观.所以暂时先抛弃使用htm