DUIR Framework 相关技术介绍
开发者在搭建界面自动化测试框架时,又或者在开发界面自动化控制的机器人时,往往需要对界面进行自动化的程序控制。而现在公司内部使用的杜尔自动化框架,就是一个封装了界面自动化控制逻辑的程序框架。基于该框架,开发者可以轻松、快速的控制各类程序的界面,这些界面可以包含 Windows 界面、浏览器界面。
五年前曾经写过一篇关于自动化测试的框架的文章:《搭建 WPF 上的 UI 自动化测试框架》。杜尔自动化框架,也是基于类似的技术,今天整理一下这个框架所使用的技术,在这里和大家简单分享一下。
杜尔的架构如下图所示:

对图中的所涉及技术,简单介绍如下:
最底层平台,是 Windows 平台,我们的框架只考虑该平台界面的自动化。
最上层,是框架的使用者、客户端,目前这个框架会集成在我公司的另一个智能客户端 VICA (VAT Intelligent Client Assistant)中。
再往下,就是 DUIR: Dben UI Robot Framework,中文名:杜尔机器人框架。
杜尔框架主要分为两层:下层是对 windows 下各类普通控件的查找、定位、封装;上层则是基于部分常见的场景,使用下层的控件来实现的各类场景逻辑的封装。其核心,自然是底层的控件封装。该层的实现,主要依赖三类技术:
- 直接使用句柄、消息机制等底层 Windows 机制来实现控制的控制。
- 使用 UI Automation for Managed Code 来实现控件自动化。
- 使用 VSTT(Visual Studio Testing Tool)& RPF 框架来实现控件自动化以及录制功能。
第 2、3 两项技术,都主要依赖于底层的 Windows Automation API,该技术是整个体系的核心。介绍如下:
“Microsoft UI Automation is an accessibility framework that enables Microsoft Windows applications to provide and consume programmatic information about user interfaces (UIs). It provides programmatic access to most UI elements on the desktop. It enables assistive technology products, such as screen readers, to provide information about the UI to end users and to manipulate the UI by means other than standard input. UI Automation also allows automated test scripts to interact with the UI.”
详情,见:《Windows Automation API: UI Automation》。
再回过头来看 UI Automation for Managed Code,这是 UI Automation 的托管代码框架。详见:《UI Automation for Managed Code》。
另一项技术,则是 RPF,详见《Record and Playback Framework》。RPF 支持录制与播放,集成了 Win32、MSAA、UIA、IE 等底层平台,介绍如下:
“RPF is a tool used to record meaningful steps performed by a user against a UI-based target application and then generate a code/script to play these steps back. RPF consists of two parts Recording and Playback. Both parts use Win32 and
Microsoft Active Accessibility (MSAA) or UIAutom
ation(UIA) as the underlying technologies, however at this time RPF has full support for Win32 and MSAA only and UIA is
supported by Playback only. Also RPF
natively supports Internet Explorerwhich makes it the first (and the only at the moment) tool that natively supports Win32, MSAA, UIA and IE on Vista and XP.”
另外,图中的 VSTT,全称为 Visual Studio Testing Tool。是 Visual Studio 中 Coded UI Test 框架的基础框架。其使用托管代码构建,基于下层的 RPF 框架构建。通过使用 VSTT,使得我们可以以一种更加简单的 API、更加易用的托管代码,并配合更加方便使用的工具来实现 UI 自动化。详见:《Introduction to Record and Playback Engine in VSTT 2010》。
目前,虽然 DUIR 支持 Win32、UIA、VSTT,但是大部分的场景,都会直接基于 VSTT 来实现。只有少量 VSTT 无法实现的情况下,我们才会使用另外两个技术来实现,并封装在 DUIR 内部。
DUIR Framework 相关技术介绍的更多相关文章
- Asp.Net WebAPI及相关技术介绍(含PPT下载)
此PPT讲述了Asp.Net WebAPI及相关Web服务技术发展历史. 共80多页,Asp.Net WebAPI在讲到第36页的时候才会出现,因为这个技术不是凭空产生的,它有着自己的演变进化的历史. ...
- Winform开发的应用环境和相关技术介绍
随着时间的推移,Winform也算是能够坚持下来最久的技术之一了,它的昔日辉煌和现今的依旧活跃,导致了它依旧拥有者很庞大的用户群体,虽然目前很多技术日新月异的,曾经的ASP.ASP.NET WebFo ...
- Evernote相关技术介绍——mysql+lucene+tomcat
Evernote服务 我们的服务由以下几个组件组成. 分片(NoteStore) 分片是Evernote服务的核心单元,用于存储用户的笔记.每个分片最多可以支撑30万个Evernote用户,并包含 ...
- (转) SLAM系统的研究点介绍 与 Kinect视觉SLAM技术介绍
首页 视界智尚 算法技术 每日技术 来打我呀 注册 SLAM系统的研究点介绍 本文主要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我 ...
- MVC中Controller控制器相关技术
第6章Controller相关技术 Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务器端的交互,并 且负责协调Model与View之间的数椐传递,是ASP.NET MV ...
- AOP技术介绍--(.Net平台AOP技术研究)
4.1.Net平台AOP技术概览 .Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级 ...
- spring框架:(一) 技术说明(技术介绍,技术优势以及发展史等)
一.技术说明(技术介绍,技术优势以及发展史等) 1.1.什么是spring 1.2.spring由来(发展历程) 1.3.spring核心 1.4.spring优点 1.5.spring体系结构 1. ...
- .Net环境下的缓存技术介绍 (转)
.Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 ...
- RAID技术介绍
RAID技术介绍 简介 RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握.本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念. RAI ...
随机推荐
- JAVA 继承基本类、抽象类、接口
Java是一个面向对象的语言,java面向对象一般有三大特征:封装.继承.多态. 封装:就是把一些属性和方法封装到一个类里. 继承:就如子类继承父类的一些属性和方法. 多态:就如一个父类有多个不同特色 ...
- C语言中字符串常用函数--strcat,strcpy
strcpy 原型声明:extern char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 功能:把从src ...
- 用 boost::multi_index 管理玩家
用 boost::multi_index 管理玩家(金庆的专栏)网游服务器上的玩家集合需要多种索引:如用ID查找,角色名查找, 用登录时分配的会话ID查找.用boost::multi_index进行玩 ...
- 干掉头疼的finished with non-zero exit value 2
很多次会出现 finished with non-zero exit value 2 . Error:Execution failed for task ':app:dexDebug'. > ...
- 谈谈javascript 中的函数问题
聊聊javascript中的函数 本文可作为李刚<疯狂htmlcssjavas讲义>的学习笔记 先说一个题外话 前几天在知乎上流传着一个对联 上联是雷锋推到雷峰塔 nnd 这是什么对联? ...
- Dynamics CRM2011中通过JS脚本方式显示和隐藏ribbon中的自定义按钮
首先该方法不能写在页面的onload中,因为当从子网格返回常规表单的时候ribbon区域会重新加载而常规表单所在的iframe区域是不会被刷新的,所以如果写在onload中的话就控制的不那么完全了,我 ...
- 【一天一道LeetCode】#15 3Sum
一天一道LeetCode系列 (一)题目 Given an array S of n integers, are there elements a, b, c in S such that a + b ...
- TCP/IP概述
1) 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物理接口细节. 2) 网络层,有时也称作互联网层, ...
- OpenCV处理视频序列的类
代码出处,opencv2 cookbook: /*--------------------------------------------------------------------------- ...
- 基于ARM-contexA9-蜂鸣器pwm驱动开发
上次,我们写过一个蜂鸣器叫的程序,但是那个程序仅仅只是驱动蜂鸣器,用电平1和0来驱动而已,跟驱动LED其实没什么两样.我们先来回顾一下蜂鸣器的硬件还有相关的寄存器吧: 还是和以前一样的步骤: 1.看电 ...