3 Pywinauto使用

连接为

http://pywinauto.github.io/

3.1 关联到一个应用,用以下方法:

start_(path)
connect_(handle or processID)

以下是示例代码

app = Application()
app.start_(“notepad.exe”)
app.connect_(path = r"c:\windows\system32\notepad.exe")
app.connect_(process = 2341)
app.connect_(handle = 0x010f0c)

3.2 调用一个窗体

当初始化app后,可以通过模糊匹配的方式操作该app中的一个窗体,变量名可以是该窗体标题的部分或全部

dlg = app.window_(title_re = ".*Part of Title.*")
dlg = app.PartOfTitle

例如,对一个写字板app应用中的窗口,在英文操作系统中,其标题是“untitled - Notepad”

可以使用以下两种方式调用该窗体

app.Untitled
app.Notepad

对于关于窗口,其标题是“About Notepad”

可以使用以下名称调用该窗体

app.AboutNotepad

3.3 调用一个控件

Pywinauto使用以下顺序定位一个控件

1: 控件的标题,即title

2:控件的类名,即friendly class

3:控件的标题加类名,即title + friendly class

对于“关于”窗口的中按钮,可以使用以下任意一种方式调用

app.AboutNotepad.OK
app.AboutNotepad.Button1
app.AboutNotepad.OKButton

如果在写字板中输入文字,执行退出时会 弹出询问窗口,对于其中的“不保存按钮”,其英文标题是Don’t Save,按照上面的规律,可以使用以下任意一方式调用该按钮,即

app.Notepad.DontSave 
app.Notepad.DoSave
app.Notepad.DotSave

以上无论DontSave、DoSave、DotSave都是标题Dont’ Save的一部分,pywinauto都可以通过模糊匹配的方式找到该按钮。

3.4 控件的基本操作

如下:

Control.Click() #点击
Control.MenuSelect() #菜单选择
Control.PressMouse/MoveMouse/ReleaseMouse() #按、移动、释放鼠标
Control.TypeKeys() #键入字符

其中TypeKeys()支持组合键,例如

Ctrl: ^

Alt: %

Shift: +

以下是其常见属性的读取:

ControlID()
FriendlyClassName()
WindowText()
Rectangle()
IsEnabled()
IsVisible()

如果想了解详细,可以查看pywinauto的官方文档,其链接是

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

在该网页里,最上方是所有控件的基本操作和属性读取,下面依次是每个控件独有的操作,在实际的编程中,如果想知道某个控件的某个操作,可以通过文档查询。

4 其它说明

4.1 和PyUnit集成

只要代码书写符合PyUnit的要求,可以很容易的让pywinauto所测试的win32应用和PyUnit集成。

4.2 和Selenium集成

Selenium支持Python语言,因此,很容易让pywinauto与selenium。

在一些测试场景中,需要运行完某个win32应用后,立刻在web应用程序中查看结果,也就是说,一个测试同时要面对win32和web两种应用,可以用python+pywinauto+selenium组合的方式实现。

4.3 代码结构

有兴趣的网友,还可以阅读其源代码,主要的几个程序是

Application.py:与app相关   
Findwindows.py:窗体的查找
Timings.py:各种操作的时间间隔设置
win32_controls.py:普通控件的访问
common_controls.py:TreeView/ListView...等控件的访问
Menuwrapper.py:菜单的访问
 

Pywinauto使用方法的更多相关文章

  1. Python+Selenium - 文件上传

    如下图,从系统点击上传功能,打开到这种如下图页面的才适合本文介绍的处理方法 处理方法一 pywinauto库 优点:可以选择多个文件,路径中有中文也支持 缺点:只能Windows平台使用 安装 pip ...

  2. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  3. Python安装pywinauto时遇到error: The read operation timed out解决方法

    Python结合Pywinauto 进行 Windows UI 自动化,安装pywinauto时遇到的一些问题: 解决方法:很明显是链接超时国外网站你懂的V_P_N吧,直接通过报错信息的链接复制到浏览 ...

  4. Pywinauto在Windows Twain Driver自动化测试中的应用研究

    摘  要: 以Python为基础,结合对Twain Driver测试工具的具体需求,将Pywinauto引入到Twain Driver的自动化测试中.介绍了Pywinauto的基本概念,通过测试用例说 ...

  5. 用pywinauto进行win32应用程序的测试

    之前做win32应用测试时,用过很多大家耳熟成详的工具,接触pywinauto之前,对它的了解也不多,然而,随着对它了解的增多,发现它借助了python动态对象的能力,使得代码即便于书定,也便于阅读, ...

  6. 在中文windows下使用pywinauto进行窗口操作

    这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官 ...

  7. pywinauto如何获取gridwindow控件的屏幕位置

    一:问题描述 问题一:通过查找pywinauto在线文档,其中没有讲解到gridwindow控件的方法,我不知道这个控件是不是标准控件,还是pywinauto根本就没适配这个控件.从网上查询了好多资料 ...

  8. pywinauto简单介绍

    Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面.它可以允许你很容易的发送鼠标.键盘动作给Windows的对话框和控件. 其中,最主要功能为对 ...

  9. pywinauto二次封装(pywinnat.py)

    将pywinauto常用方法进行封装,使得pywinauto用起来更简单 #头文件的引入 from pywinauto import application from pywinauto import ...

随机推荐

  1. CPU占用高系统反应慢之问题定位

    今天在看到公司群里有关于测试反应测试服务器比较卡,调用调用超时,响应很慢,成功率低的问题,然后想着去处理这个问题. 本着开发的精神,摒弃网管的水平,寻找问题的根源. 主要从如下几个方面入手: 1:查询 ...

  2. python生成二维码(简易)

    首先要的配置: pillow image qrcode zxing 然后直接上代码: import PIL import qrcode # 实例化二维码生成类 qr = qrcode.QRCode( ...

  3. Java类的变量初始化顺序

    大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台 ...

  4. linux tcp 高并发最大连接数

    Linux下高并发socket最大连接数所受的限制问题 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统 ...

  5. python __iter__ 迭代器

    1. 迭代器是什么? 迭代器是一个对象,是python非常强大的特性 根本上说, 迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数. 当你或是一个循环机制(例如 for 语句)需要下 ...

  6. python脚本实现-excel二级统计

    pandas和SQL数据分析实战视频教程 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2& ...

  7. Git放弃修改

    Stage之前放弃修改 如果做了修改,还没有stage(add),使用 git status 可以查看所有的改动: 修改:modified 删除:deleted 添加:Untracked 想要放弃修改 ...

  8. window 下 某个端口被占用

    window 下 某个端口被占用 1. 开始—->运行—->cmd,或者是window+R组合键,调出命令窗口: 2.输入命令:netstat -ano,列出所有端口的情况.在列表中我们观 ...

  9. js Map对象的用法

    第一篇: Map: Map是一组键值对的结构,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array: var names = ['Michael ...

  10. RabbitMQ 3.7.X集群:从入门到精通,这一篇就够了

    RabbitMQ是流行的开源消息队列系统,本身已经具备了较强的并发处理速度及运行稳定性,然而在大规模的实际应用中,往往还需要使用集群配置来保证系统中消息通信部分的高可用性,并发处理性能及异常恢复能力. ...