本文主要用到一个uiautomation的开源框架,是一个咱们中国人写的,支持MFC,Windows Forms,WPF,Metro,Qt界面;此文主要是自己的个人总结,开源作者原文:http://www.cnblogs.com/Yinkaisheng/p/3444132.html

此自动化的主要思想是利用此框架抓取到程序的各种句柄,然后对句柄执行各种操作。

一、uiautomation方法

1、WindowContrl(searchDepth,ClassName,SubName)          查找窗口中的程序,如果有中文则需用Unicode;可用window.Exists(maxSearchSeconds)来判断此窗口是否存在;

2、EditControl(searchFromControl)                 查找编辑位置,找到后可用DoubleClick()来改变电脑的focus;edit.SetValue("string")输入值;

3、Win32API.SendKeys("string")                      如果已在编辑位置,则可用此方法来输入值,{Ctrl}为ctrl键,其他类似;{@  8}格式可输入8个@,对于数字也可实现此功能,但对于字母不能...;

4、MenuItemControl(searchFromControl,Name)                   查找菜单按钮;

5、ComboBoxControl(searchFromControl,AutomationI)       查找下拉框,然后在此基础上用Select("name")方法来选择需要的选项;

6、BottonControl(searchFromControl,Name,SubName)        查找按钮;

7、automation.FindControl(firefoxWindow,

lambda c:(isinstance(c, automation.EditControl) or isinstance(c, automation.ComboBoxControl)) and c.Name == 'Enter your search term'

) 按条件搜索handle

二、对找到句柄常用操作

Click()            点击;

RighClik()       右键点击;

SendKeys()     发送字符;

SetValue()      传值,一般对EditControl用;

三、对windows程序常用操作

subprocess.Popen('Name')    用进程打开程序;

window.Close()            关闭窗口;

window.SetActive()           使用;

window.SetTopMost()       设置为顶层

window.ShowWindow(uiautomation.ShowWindow.Maximize)  窗口最大化

window.CaptureToImage('Notepad.png')  截图;

uiautomation.Win32API.PressKey(uiautomation.Keys.VK_CONTROL)    按住Ctrl键

uiautomation.Win32API.ReleaseKey(uiautomation.Keys.VK_CONTROL) 释放Ctrl键

automation.GetConsoleWindow()      #return console window that runs python,打开控制台

automation.Logger.ColorfulWriteLine('\nI will open <Color=Green>Notepad</Color> and <Color=Yellow>automate</Color> it. Please wait for a while.')  控制台传值(彩色字体),普通传值用WriteLine;

automation.ShowDesktop() 显示桌面;

四、句柄的抓取

直接运行automation模块枚举窗口时,支持下列参数(从doc窗口运行automation.py程序 ):

-t intValue     延迟枚举时间,单位秒

-r                  从树的根部枚举,如果不指定,从当前窗口枚举

-d intValue    枚举控件树的的深度,如果不指定,枚举整个树

-f                  从焦点控件枚举,如果不指定,从当前窗口枚举

-c                  从光标下的控件枚举,如果不指定,从当前窗口枚举

-a                  获取光标下控件及其所有父控件

-n                 显示控件的完整Name, 如果不指定,只显示前30个字符

-m                显示控件更多属性,默认只显示控件的四个属性

示例:

automation.pyc –t3, 3秒后枚举当前窗口所有控件

automation.pyc –d2 –t3, 3秒后枚举当前窗口前三层控件

automation.pyc –r –d1 –t0 -n, 0秒后从根部枚举前两层控件,并显示控件完整名称

automation.pyc –c –t3, 3秒后显示鼠标光标下面的控件信息

用python进行应用程序自动化测试(uiautomation)的更多相关文章

  1. 【Appium + Python + WebviewH5】之微信小程序自动化测试

    进行调试,打开X5: http://debugmm.qq.com/?forcex5=true http://debugx5.qq.com http://debugtbs.qq.com 一般前两个就可以 ...

  2. 微信小程序自动化测试最佳实践(附 Python 源码)

    本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善,很多公司的产品业务形态逐渐从 App 延升到微信小程序.微信公众号等.小程 ...

  3. Python appium搭建app自动化测试环境

    appium做app自动化测试,环境搭建是比较麻烦的. 也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎. 但没有成功的环境,就没有办法继续后续的使用. 在app自动化测试当中,我们主要是 ...

  4. appium+python 微信小程序的自动化

    sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q  -p 8889 -s addons.py http: ...

  5. 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流

    最初的步骤 Python是大小写敏感的 任何在#符号右面的内容都是注释 >>> help('print')在“print”上使用引号,那样Python就可以理解我是希望获取关于“pr ...

  6. 一个python爬虫小程序

    起因 深夜忽然想下载一点电子书来扩充一下kindle,就想起来python学得太浅,什么“装饰器”啊.“多线程”啊都没有学到. 想到廖雪峰大神的python教程很经典.很著名.就想找找有木有pdf版的 ...

  7. python实现FTP程序

    python实现FTP程序 程序源码 上传功能 查看文件 cd功能 创建目录 程序源码 目录结构 服务端 主程序 import optparse import socketserver import ...

  8. python 购物车小程序

    python 购物车小程序 功能要求:1.启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. ...

  9. appium+java(五)微信小程序自动化测试实践

    前言: 上一篇<appium+java(四)微信公众号自动化测试实践>中,尝试使用appium实现微信公众号自动化测试,接着尝试小程序自动化,以学院小程序为例 准备工作 1.java-cl ...

随机推荐

  1. 【BZOJ1834】 网络扩容

    Time Limit: 1000 ms   Memory Limit: 128 MB Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费 ...

  2. Service IP 原理 - 每天5分钟玩转 Docker 容器技术(137)

    Service Cluster IP 是一个虚拟 IP,是由 Kubernetes 节点上的 iptables 规则管理的. 可以通过 iptables-save 命令打印出当前节点的 iptable ...

  3. dwr3+spring实现消息实时推送

    最近项目要实现一个消息推送的功能,主要就是发送站内信或者系统主动推送消息给当前在线的用户.每次的消息内容保存数据库,方便用户下次登录后也能看到.如果当前用户在线,收到站内信就主动弹出提示.一开始想到的 ...

  4. iOS.Animations.by.Tutorials.v2.0汉化(二)

    翻译自:iOS.Animations.by.Tutorials.v2.0 第一节(第1章) 动画属性 现在你已经看到了动画是多么的简单,你可能很想知道你的视图控件是怎么动起来的.本节将给你一个UIVi ...

  5. 10种软件开发中 over-engineering 的错误套路

    别把「不要过度使用 Generic」误解成「不用 Generic」,也别把「不要写一些不必要的 Wrapper」误解成「不写任何 Wrapper」.我只是在讲 over-engineering 这个事 ...

  6. Android的OkHttp开源框架的使用方法

    前段时间研究了下Android里面非常火爆的网络请求库OkHttp,这篇文章主要来介绍下OkHttp的常用请求的使用方式,后面一篇文章会介绍本人基于OkHttp封装的一个操作更简单.更适用于项目的网络 ...

  7. An internal error occurred during: "Building workspace". GC overhead limit exceeded

    1 错误描述 2 错误原因 3 解决办法

  8. zTree实现删除树子节点

    zTree实现删除树子节点 1.实现源码 <!DOCTYPE html> <html> <head> <title>zTree实现基本树</tit ...

  9. jquery Dialog弹框插件

    function Dialog(options) { var defaults = { // 默认值. title: '', // 标题文本,若不想显示title请通过CSS设置其display为no ...

  10. Asp.Net WebApi 调试利器“单元测试”

    当我们编辑好一个WebApi应用程序后,需要对该Api接口进行调试,传统的调试办法是在方法内设置断点,然后用PostMan等http工具模拟访问进行查看WebAPI的运行情况,但这种除了效率较低还进行 ...