Windows应用UI自动化测试框架pywinauto简介

什么是pywinauto

它是什么

pywinauto是一组用于自动化Microsoft Windows GUI的python模块。 最简单的是,它允许您将鼠标和键盘操作发送到窗口对话框和控件。

安装

运行 pip install pywinauto

手动安装

安装以下Python包

pyWin32

comtypes

six

(可选)Pillow (截图用)

从https://github.com/pywinauto/pywinauto/releases中下载最新的pywinauto

解压并运行 python setup.py install

要检查是否已正确安装,请运行Python,中文环境可能不适用(

>>> from pywinauto.application import Application

>>> app = Application(backend="uia").start("notepad.exe")  //打开一个记事本程序

>>> app.UntitledNotepad.type_keys("%FX")            //使用Alt+快捷键关闭记事本

入门指南

  • 常见的GUI控件
  • GUI对象检查/Spy工具
  • 自动化的切入点
  • 窗口规格
  • 属性解析魔法
  • 如何知道魔法属性名称

GUI 控件

所有用户应该都对控件非常了解了,在窗口上能被点击或进行其它交互的部分都是控件的一种

Windows应用UI自动化测试框架pywinauto简介_第1张图片

 Windows应用UI自动化测试框架pywinauto简介_第2张图片

确定哪种可访问性技术

一旦你安装了pywinauto - 你怎么样? 第一个必要的事情是确定哪种可访问性技术(pywinauto的backend)可以用于您的应用程序。

Windows上受支持的辅助功能技术列表:

Windows应用UI自动化测试框架pywinauto简介_第3张图片

GUI对象检查/Spy工具

如果您仍然不确定哪个backend最适合您,请尝试使用免费提供的对象检查/Spy工具:从GitHub repo gui-inspect-tool下载它们.

Windows应用UI自动化测试框架pywinauto简介_第4张图片

 如果所有检测工具都看不到某些或所有控件,则仍然可以通过使用基本模块鼠标和键盘生成鼠标和键盘事件来控制应用程序。

Windows应用UI自动化测试框架pywinauto简介_第5张图片

 Windows应用UI自动化测试框架pywinauto简介_第6张图片

自动化的切入点

一个应用程序,你知道它支持上面提到的一种可访问性技术。 下一步是什么?

首先,您应该启动应用程序或连接到现有的应用程序实例。 它可以使用Application对象完成。这不仅仅是subprocess.Popen的克隆,而是进一步自动化的入口点,通过进程边界限制所有范围。 控制可能很少的应用程序实例很有用(您使用一个不打扰另一个实例的实例)。

Windows应用UI自动化测试框架pywinauto简介_第7张图片

如果你想要跨越进程边界(比如Win10计算器在多个进程中绘制它的小部件),你的入口点是一个Desktop对象。

Windows应用UI自动化测试框架pywinauto简介_第8张图片

窗口规范

这是高级pywinauto API的核心概念。 您可以近似或更详细地描述任何窗口或控件,即使它尚不存在或已经关闭。 窗口规范还保留有关将用于获得真实窗口或控件的匹配/搜索算法的信息。

让我们创建一个详细的窗口规范:

Windows应用UI自动化测试框架pywinauto简介_第9张图片

实际窗口查找由wrapper_object()方法执行。 它返回实际现有窗口/控件的一些包装器或引发ElementNotFoundError。 这个包装器可以通过发送动作或检索数据来处理窗口/控件。

但是Python可以隐藏这个wrapper_object()调用,这样你就可以在生产中拥有更紧凑的代码。 以下陈述完全相同:

创建窗口规范有许多可能的标准。 这只是几个例子。

Windows应用UI自动化测试框架pywinauto简介_第10张图片

可以在pywinauto.findwindows.find_elements()函数中找到可能的标准列表。

属性解析魔法

Windows应用UI自动化测试框架pywinauto简介_第11张图片

如何知道魔法属性名称

如何将“最佳匹配”附加到控件上有几个原则。 因此,如果窗口规范接近其中一个名称,您将获得成功的名称匹配。

1、按标题(窗口文字,名称): app.Properties.OK.click()

2、按标题和控件类型: app.Properties.OKButton.click()

3、按控件类型和编号: app.Properties.Button3.click() (注意: Button0和Button1匹配相同的按钮,Button2是下一个,等等。)

4、按左上角标签和控件类型: app.OpenDialog.FileNameEdit.set_text("")

5、按控件类型和项目文本:app.Properties.TabControlSharing.select("General")

通常并非所有这些匹配的名称都可以同时使用。 要检查指定对话框的这些名称,可以使用print_control_identifiers()方法。 可能的“best_match”名称显示为树中每个控件的Python列表。 也可以从方法输出中复制更详细的窗口规范。 比方说 app.Properties.child_window(title="Contains:", auto_id="13087", control_type="Edit")。

连接到应用程序

这边用window自带的记事本程序作为案例,给大家做讲解。连接应用程序,首先需要用到pywinauto.application.Application()来创建一个应用程序对象,然后再连接到应用程序。

有如下两种方法:

方式一:直接通过start方法打开操作的应用程序

方式二:连接已经打开应用程序,可以通过connect连接到指定的应用程序

Windows应用UI自动化测试框架pywinauto简介_第12张图片

运行以上代码,就会自动打开记事本记事本,如下

Windows应用UI自动化测试框架pywinauto简介_第13张图片

窗口选择

打开这个窗口之后,我们要操作该窗口的话,那么就的先选中这个窗口,关于窗口的选择有一下几种方式

Windows应用UI自动化测试框架pywinauto简介_第14张图片

控件操作

程序窗口中的每一块内容,都是一个控件,我们要对这个窗口的某一块内容进行操作,就需要选择到对应的控件,我们可以通过print_control_identifiers()这个方法,来获取这个窗口下的直接子控件,打印结果如下:

Windows应用UI自动化测试框架pywinauto简介_第15张图片

内容输入

内容输入的方法:type_key()

app.UntitledNotepad.Edit.type_keys("Hi from Python interactive prompt %s" % str(dir()), with_spaces = True)

键盘操作通过键盘完成以下操作:全选(ctrl+A) 复制(Ctrl+C) 粘贴(Ctrl+V) 回车(Enter) 粘贴(Ctrl+V)

pywinauto.keyboard.send_key

pywinauto模拟操作键盘,需要使用到 pywinauto.keyboard.send_keys这个方法

Windows应用UI自动化测试框架pywinauto简介_第16张图片

键盘操作

键盘操作通过键盘完成以下操作:全选(ctrl+A) 复制(Ctrl+C) 粘贴(Ctrl+V) 回车(Enter) 粘贴(Ctrl+V)

pywinauto.keyboard.send_key

pywinauto模拟操作键盘,需要使用到 pywinauto.keyboard.send_keys这个方法

Windows应用UI自动化测试框架pywinauto简介_第17张图片

常见的按键操作

##### 字母按键用按键小写字母表示

常用的一些按键

 Windows应用UI自动化测试框架pywinauto简介_第18张图片

按键修饰符

Windows应用UI自动化测试框架pywinauto简介_第19张图片

 更多按键参考官方文档:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html

鼠标操作

pywinauto操作鼠标的所有方法都封装在pywinauto. mouse这个模块中,使用鼠标之前。

首先要导入mouse模块,mouse模块中包含了一系列的鼠标操作事件。

 pywinauto. mouse

鼠标移动:move方法

move(coords=(x轴坐标,y轴坐标))

缓慢移动鼠标案例

Windows应用UI自动化测试框架pywinauto简介_第20张图片

Windows应用UI自动化测试框架pywinauto简介_第21张图片

等待长时间操作

GUI应用程序行为通常不稳定,脚本需要等待,直到出现新窗口或关闭/隐藏现有窗口。 pywinauto可以隐式地(默认超时)灵活地等待对话框初始化,或者明确地使用专用方法/函数来帮助您使代码更容易和更可靠。

Windows应用UI自动化测试框架pywinauto简介_第22张图片

每种不同控制类型可用的方法

这些功能可用于所有控件。

capture_as_image click click_input close close_click debug_message double_click double_click_input drag_mouse draw_outline get_focus get_show_state

maximize menu_select minimize move_mouse move_window notify_menu_select

notify_parent press_mouse press_mouse_input release_mouse release_mouse_input restore

right_click right_click_input send_message send_message_timeout set_focus set_window_text

type_keys Children Class ClientRect ClientRects ContextHelpID ControlID ExStyle Font Fonts FriendlyClassName GetProperties HasExStyle HasStyle IsChild IsDialog IsEnabled

IsUnicode IsVisible Menu MenuItem MenuItems Owner Parent PopupWindow ProcessID Rectangle Style Texts TopLevelParent UserData VerifyActionable VerifyEnabled VerifyVisible WindowText

更多控件支持的功能参考:https://pywinauto.readthedocs.io/en/latest/controls_overview.html

你可能感兴趣的:(windows,ui,自动化,Windows,UI自动化)