写点什么

基于 Python+uiautomation 的 windowsGUI 自动化测试概述

作者:虫无涯
  • 2023-03-03
    陕西
  • 本文字数:2589 字

    阅读完需:约 8 分钟

1 前言

一直使用 Python 做自动化测试,近期遇到了要对桌面端软件即 windowsGUI 进行自动化测试。Python 的 GUI 自动化测试工具有很多,但是都有不同的侧重点。本次会详细说明为啥选择 uiautomation 来做测试。

2 PythonGUI 工具

2.1 常用的 PythonGUI 编程工具

详情参考:https://blog.csdn.net/NoamaNelson/article/details/113678356


2.2 常用 PythonGUI 自动化测试工具

详细对比参考:https://blog.csdn.net/m0_37602827/article/details/108308991



2.3 说明

经过前边的介绍,我们主要是用例进行自动化测试的,所有 pythonGUi 编程的一些工具就用不到了。而常用的那三种 pythonGUI 自动化测试工具,有支持的平台有限,所以经过一番折腾,看到大神使用 uiautomation,经过验证该工具很不错,用起来也方便。

3 uiautomation 简介

3.1 作者博客

https://www.cnblogs.com/Yinkaisheng/p/3444132.html

3.2 uiautomation 信息获取

3.3 大体内容

  • uiautomation 是作者业余时间开发的供自己使用的一个 python 模块;

  • 所以安装的时候直接:


pip install uiautomation
复制代码


  • UIAutomation 实现的自动化支持微软提供的各种界面开发框架,如 Win32, MFC, Windows Forms, WPF, Metro App, IE;

  • 另外 Qt, Firefox, Chrome 实现了 UI Automation Provider,也支持 UIAutomation;

  • 作者用 Python 和 C++对 UIAutomation 做了一层封装,方便我自己的使用,可以快速开发自动化脚本;

  • UIAutomation 支持平台包括 Windows XP(SP3),Windows Vista, Windows 7, Windows 8、8.1、10;

4 uiautomation 使用方法

4.1 常用方法

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
复制代码

4.2 句柄常用操作

Click() # 点击;
RighClik() # 右键点击;
SendKeys() # 发送字符;
SetValue() # 传值,一般对EditControl用;
复制代码

4.3 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 and <Color=Yellow>automate it. Please wait for a while.’) # 控制台传值(彩色字体),普通传值用WriteLine;
automation.ShowDesktop() # 显示桌面;
复制代码

4.4 句柄的抓取

直接运行 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秒后显示鼠标光标下面的控件信息
复制代码

5 控件定位

使用 Inspect.exe 工具进行控件识别和定位


  • 网上下载该软件,双击打开,如下:


  • 设置定位控件高亮显示


  • 示例:比如打开计算器后,识别控件的信息如下


6 项目示例

6.1 示例说明

1.打开本地计算器软件;2.输入 2+8 计算结果 3.进行断言结果的准确性

6.2 示例代码

# -*- coding:utf-8 -*-
import unittestimport loggingimport timeimport uiautomationimport os
# @unittest.skip("跳过")class TestFaultTree(unittest.TestCase): def setUp(self) -> None: # 初始化 os.system("calc") # 打开计算器 time.sleep(2) self.calc = uiautomation.WindowControl(Name="计算器") self.calc_list = ["二", "加", "八", "等于"] self.result = "10"

def tearDown(self) -> None: time.sleep(1) self.calc.ButtonControl(Name="关闭 计算器").Click()

def test_toolbar(self):
time.sleep(1) for i in range(0, len(self.calc_list)): self.calc.ButtonControl(Name=self.calc_list[i]).Click() time.sleep(0.5)
calc_result = self.calc.TextControl(foundIndex=3).Name print("计算器运行结果为:", calc_result) print("预期结果为:", self.result) self.assertIn(self.result, calc_result)
if __name__ == "__main__": unittest.main()
复制代码

7 示例效果

8 预告

会出一个系列文章主要讲解如何搭建 windowsGUI 自动化测试框架从 0 到 1,基于 Python+Unittest+UIautomation+HtmlTestRunner 的架构




发布于: 刚刚阅读数: 7
用户头像

虫无涯

关注

专注测试领域各种技术研究、分享和交流~ 2019-12-11 加入

CSDN测试领域优质创作者 | CSDN博客专家 | 阿里云专家博主 | 华为云享专家 | 51CTO专家博主

评论

发布
暂无评论
基于Python+uiautomation的windowsGUI自动化测试概述_Python_虫无涯_InfoQ写作社区