【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

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应