【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践

2023-11-06 10:18

本文主要是介绍【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=jpeg

在界面自动化测试领域里存在许多流行的自动化测试工具,例如目前比较受欢迎的开源自动化工具Selenium、Katalon; HP旗下知名的商业软件Unified Functional Testing(更名前叫QTP); 隶属于IBM以数据驱动测试的RTF(Rational Functional Tester)等等,这些“明星”测试工具在网上有大量学习资料,可以很容易地查找到,这里就不多介绍了。 今天想要给大家介绍一款较少被人们熟知而又比较实用的自动化测试工具——微软UIAutomation。

一、微软UIAutomation简介

640?wx_fmt=png

UIAutomation是由微软开发的界面自动化测试工具,是.NET Framework的组件之一,可进行C/S类应用的界面自动化测试。 此自动化库一开始就是为可访问性和UI测试自动化任务而专门设计的,使用UI自动化库来测试运行支持.NET Framework的操作系统,例如Windows XP、Windows Vista、Windows 7、Windows Server 2003和Windows Server 2008等操作系统主机上的Win32应用程序、.NET Windows窗体应用程序和WPF应用程序。
在UIAutomation中,所有的窗体、控件都表现为一个AutomationElement,AutomationElement中包含此控件或窗体的属性,在实现自动化的过程中,通过其相关属性进行对控件自动化操作。 所有显示在桌面上的UI,实际上是一个UIAutomation树,它有一个根节点,表示的是当前桌面。 通过根节点,可以通过窗体或控件的Process Id、Process Names或者Windows Name找到相应的子AutomationElement,例如Dialog、Button、TextBox、CheckBox等标准控件,通过控件所对应的Pattern进行相关的操作。 UIAutomation树不是一个固定的结构,它其中的一部分是在需要时构建的,并且可以在添加、移动或删除元素时进行更改。
UIAutomation的体系结构如图1所示:

640?wx_fmt=png

(图1 UIAutomation的体系结构)
在UIAutomation的体系结构中,UIAutomationProvider.dll和UIAutomationTypes.dll主要负责的是服务端,UIAutomationClient.dll和UIAutomationTypes.dll主要负责的是客户端,UIAutomationCore.dll作为UI自动化的核心部分,主要负责服务端和客户端的交互,而UIAutomationClientSideProvides.dll主要为客户端程序提供自动化支持。

二、UIAutomation实践

640?wx_fmt=png

通过调研,发现 目前支持UIAutomation的UI元素识别工具主要有两种: UISpy和Inspect。 经过实际使用对比,发现UISpy有时候无法获取部分窗体或控件元素,而Inspect可以比较全面地识别窗体和控件元素,所以 推荐使用Inspect作为识别UI元素的工具。
Inspect工具大小不到1Mb,无需安装,可以在网上很容易搜到。 下载完毕之后,启动Inspect工具,具体的界面如下图2所示。

640?wx_fmt=png

(图2 Inspect主界面)
Inspect工具启动后,界面呈现主要有两部分,其中左面的树状图显示了各个控件或窗体的父子关系,可以看到其根节点显示为“桌面窗格”;将鼠标直接移动到树状图中的每个元素上,即可以在右面的框架中看到相应元素的属性,比如有Name(元素内容的名称)、AutomationId(唯一 的标识元素、将其与同级区分)、ControlType(控件的类型)等等。
Inspect工具的顶部是功能栏区域,界面显示如图3所示。

640?wx_fmt=png

(图3 Inspect功能栏)
其中 640?wx_fmt=png 的功能是定位到当前元素; 640?wx_fmt=png 的功能是复制当前元素的所有属性; 640?wx_fmt=png 的功能是显示/隐藏数结构; 640?wx_fmt=png 这些按钮从左到右的作用依次是: 找到父节点、找到第一个子节点、前一个兄弟节点、下一个兄弟节点、最后一个子节点,我们可以根据这些按钮来寻找相对应位置的元素。
在实际的测试过程中,我们可以直接将光标移动到要定位的元素,Inspect右侧窗口就可以直接显示对应元素的所有属性,具体情况如图4所示。

640?wx_fmt=png

(图4 测试过程中元素属性获取)
在显示的所有属性中,我们主要用到ClassName、AutomationId/Name、Ancestors(父级信息)属性,有时会根据不同系统的需求,还需要获取ControlType属性。 当获取到的ClassName中含有数字时,可以用ControlType属性替换ClassName属性。 我们把全部元素的主要属性存储在execl文件中,这样就完成了对象元素自动化定位信息的积累。
完成对象定位之后,就可以通过C#等语言编写自动化测试脚本,驱动界面对象完成界面自动化测试,如下图5所示:

640?wx_fmt=png

( 图5 编写自动化测试脚本)
通过上述方式编写自动化测试脚本,比较灵活。 对于经验丰富的编程人员来说,入门比较快。 但是它无法规避界面自动化测试领域普遍存在的入门门槛高、资产积累代价高、环境切换易失效、人员切换易失效、对象变更修复代价高、测试逻辑变更修复代价高等行业痛点问题。
针对这些痛点问题,中国农业银行研发中心定义了一套基于自然语言的、简单易懂的、满足行业最高标准的自动化测试描述语言——“商语言” ,使得普通业务背景的测试人员可以快速写出高可维护的自动化测试案例,自动转化为QTP/UIAutomation/Selenium脚本执行。具体技术方案,后续另行撰文介绍。

【作者简介】王唤宇

中国农业银行研发中心系统支持部 测试工程师 主要从事自动化测试以及自动化测试技术研究的相关工作。积极乐观,勤奋好学,生命不息,奋斗不止。

640?wx_fmt=png

640?wx_fmt=gif

这篇关于【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/356012

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前