没有合适的资源?快使用搜索试试~ 我知道了~
首页UI AutoMation简介
UI AutoMation简介
需积分: 41 42 下载量 6 浏览量
更新于2023-03-16
评论 2
收藏 325KB DOCX 举报
UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active Accessibility。UI Automation在某些方面超过了MSAA,UI自动化提供了Windows Vista中,微软Windows XP的全部功能,和Windows Server 2003。 在UI Automation中,所有的窗体、控件都表现为一个AutomationElement, AutomationElement 中包含此控件或窗体的属性,在实现自动化的过程中,我们通过其相关属性进行对控件自动化操作。对于UI用户界面来说,所有显示在桌面上的UI,其实际是一个UI Tree,根节点是desktop。我们可以使用UI Spy或者是SPY++来获得Window和Control的相关信息。在UI Automation里,根节点表示为AutomationElemnet.RootElement.通过根节点,我们可以通过窗体或控件的Process Id、Process Name或者Window Name找到相应的子AutomationElement,例如Dialog、Button、 TextBox、Checkbox等标准控件,通过控件所对应的Pattern进行相关的操作。 本文的作者详细介绍了使用方法。
资源详情
资源评论
资源推荐
一、 Introduction
UI Automation 是 Microsoft .NET 3.0 框架下提供的一种用于自动化测试的技术,是在 MSAA 基础上建立
的,MSAA 就是 Microsoft Active Accessibility。UI Automation 在某些方面超过了 MSAA,UI 自动化提供了
Windows Vista 中,微软 Windows XP 的全部功能,和 Windows Server 2003。
在 UI Automation 中,所有的窗体、控件都表现为一个 AutomationElement, AutomationElement$中
包含此控件或窗体的属性,在实现自动化的过程中,我们通过其相关属性进行对控件自动化操作。对于 UI 用户界
面来说,所有显示在桌面上的 UI,其实际是一个 UI Tree,根节点是 desktop。我们可以使用 UI Spy 或者是
SPY++来获得 Window 和 Control 的相关信息。在 UI Automation 里,根节点表示为
AutomationElemnet.RootElement.通过根节点,我们可以通过窗体或控件的 Process Id、Process Name 或
者 Window Name 找到相应的子 AutomationElement,例如 Dialog、Button、 TextBox、Checkbox 等标
准控件,通过控件所对应的 Pattern 进行相关的操作。
UI Automation structure
$
如下图所示:
1. 在服务端由 UIAutomationProvider.dll 和 UIAutomationTypes.dll 提供。
$$$$ 2. 在客户端由 UIAutomationClient.dll 和 UIAutomationTypes.dll 提供。
$$$$ 3. UIAutomationCore.dll 为 UI 自动化的核心部分,负责 Server 端和 Client 端的交互。
$$$$ 4. UIAUtomationClientSideProvides.dll 为客户端程序提供自动化支持。
Summary
$$$ 本文主要简单介绍了 相关结构以及核心库。
Open Source code
$
$$$ Github:$https://github.com/cumtkangyi/ATP
二、 UI Automation
实例
$
$$$$$ 本文通过一个实例来介绍怎样使用 UI Automation 实现软件的自动化测试。
1. 首先建立一个待测试的 winform 程序,即 UI Automation 的服务端。
$
下面是 button 事件处理程序。
$
private$void$button1_Click(object$sender,$EventArgs$e)
{
$$$$$int$i =$int.Parse(textBox1.Text);
$$$$$int$j =$int.Parse(textBox2.Text);
$$$$ textBox3.Text = (i + j).ToString();
}
2. 建立一个测试程序,做 UI Automaion 的客户端。
添加引用:UIAutomationClient.dll 和 UIAutomationTypes.dll
$
$$1 using$System;
$$2 using$System.Diagnostics;
$$3 using$System.Threading;
$$4 using$System.Windows.Automation.Provider;
$$5 using$System.Windows.Automation.Text;
$$6 using$System.Windows.Automation;
$$7
$$8 namespace$UIAutomationTest
$$9 {
$10 $$$$class$Program
$11 $$$${
$12 $$$$$$$$static$void$Main(string[]$args)
$13 $$$$$$$${
$14 $$$$$$$$$$$$try
$15 $$$$$$$$$$$${
$16 $$$$$$$$$$$$$$$$Console.WriteLine("\nBegin$WinForm$UIAutomation$test$run\n");
$17 $$$$$$$$$$$$$$$$//$launch$Form1$application
$18 $$$$$$$$$$$$$$$$//$get$refernce$to$main$Form$control
$19 $$$$$$$$$$$$$$$$//$get$references$to$user$controls
$20 $$$$$$$$$$$$$$$$//$manipulate$application
$21 $$$$$$$$$$$$$$$$//$check$resulting$state$and$determine$pass/fail
$22
$23 $$$$$$$$$$$$$$$$Console.WriteLine("\nBegin$WinForm$UIAutomation$test$run\n");
$24 $$$$$$$$$$$$$$$$Console.WriteLine("Launching$WinFormTest$application");
$25 $$$$$$$$$$$$$$$$//启动被测试的程序
$26 $$$$$$$$$$$$$$$$Process$p$=$Process.Start(@"E:\Project\WinFormTest\WinFormTest\bin\Debug\WinFormTest.exe");
$27
$28 $$$$$$$$$$$$$$$$//自动化根元素
$29 $$$$$$$$$$$$$$$$AutomationElement$aeDeskTop$=$AutomationElement.RootElement;
$30
$31 $$$$$$$$$$$$$$$$Thread.Sleep(2000);
$32 $$$$$$$$$$$$$$$$AutomationElement$aeForm$=$AutomationElement.FromHandle(p.MainWindowHandle);
$33 $$$$$$$$$$$$$$$$//获得对主窗体对象的引用,该对象实际上就是 Form1$应用程序(方法一)
$34 $$$$$$$$$$$$$$$$//if$(null$==$aeForm)
$35 $$$$$$$$$$$$$$$$//{
$36 $$$$$$$$$$$$$$$$//$$$$Console.WriteLine("Can$not$Knd$the$WinFormTest$from.");
$37 $$$$$$$$$$$$$$$$//}
$38
$39 $$$$$$$$$$$$$$$$//获得对主窗体对象的引用,该对象实际上就是 Form1$应用程序(方法二)
$40 $$$$$$$$$$$$$$$$int$numWaits$=$0;
$41 $$$$$$$$$$$$$$$$do
$42 $$$$$$$$$$$$$$$${
$43 $$$$$$$$$$$$$$$$$$$$Console.WriteLine("Looking$for$WinFormTest……");
$44 $$$$$$$$$$$$$$$$$$$$//查找第一个自动化元素
$45 $$$$$$$$$$$$$$$$$$$$aeForm$=$aeDeskTop.FindFirst(TreeScope.Children,$new$PropertyCondition(
$46 $$$$$$$$$$$$$$$$$$$$$$$$AutomationElement.NameProperty,$"Form1"));
$47 $$$$$$$$$$$$$$$$$$$$++numWaits;
$48 $$$$$$$$$$$$$$$$$$$$Thread.Sleep(100);
$49 $$$$$$$$$$$$$$$$}$while$(null$==$aeForm$&&$numWaits$<$50);
$50 $$$$$$$$$$$$$$$$if$(null$==$aeForm)
$51 $$$$$$$$$$$$$$$$$$$$throw$new$NullReferenceException("Failed$to$Knd$WinFormTest.");
$52 $$$$$$$$$$$$$$$$else
$53 $$$$$$$$$$$$$$$$$$$$Console.WriteLine("Found$it!");
$54
$55 $$$$$$$$$$$$$$$$Console.WriteLine("Finding$all$user$controls");
$56 $$$$$$$$$$$$$$$$//找到第一次出现的 Button 控件
$57 $$$$$$$$$$$$$$$$AutomationElement$aeButton$=$aeForm.FindFirst(TreeScope.Children,
$58 $$$$$$$$$$$$$$$$$$new$PropertyCondition(AutomationElement.NameProperty,$"button1"));
$59
$60 $$$$$$$$$$$$$$$$//找到所有的 TextBox 控件
$61 $$$$$$$$$$$$$$$$AutomationElementCollection$aeAllTextBoxes$=$aeForm.FindAll(TreeScope.Children,
$62 $$$$$$$$$$$$$$$$$$$$new$PropertyCondition(AutomationElement.ControlTypeProperty,$ControlType.Edit));
$63
$64 $$$$$$$$$$$$$$$$//$控件初始化的顺序是先初始化后添加到控件
$65 $$$$$$$$$$$$$$$$//$this.Controls.Add(this.textBox3);$$$$$$$$$$$$$$$$$$
$66 $$$$$$$$$$$$$$$$//$this.Controls.Add(this.textBox2);
$67 $$$$$$$$$$$$$$$$//$this.Controls.Add(this.textBox1);
$68
$69 $$$$$$$$$$$$$$$$AutomationElement$aeTextBox1$=$aeAllTextBoxes[2];
$70 $$$$$$$$$$$$$$$$AutomationElement$aeTextBox2$=$aeAllTextBoxes[1];
$71 $$$$$$$$$$$$$$$$AutomationElement$aeTextBox3$=$aeAllTextBoxes[0];
$72
$73 $$$$$$$$$$$$$$$$Console.WriteLine("Settiing$input$to$'30'");
$74 $$$$$$$$$$$$$$$$//通过 ValuePattern 设置 TextBox1 的值
$75 $$$$$$$$$$$$$$$$ValuePattern$vpTextBox1$=$(ValuePattern)aeTextBox1.GetCurrentPattern(ValuePattern.Pattern);
$76 $$$$$$$$$$$$$$$$vpTextBox1.SetValue("30");
$77 $$$$$$$$$$$$$$$$Console.WriteLine("Settiing$input$to$'50'");
$78 $$$$$$$$$$$$$$$$//通过 ValuePattern 设置 TextBox2 的值
$79 $$$$$$$$$$$$$$$$ValuePattern$vpTextBox2$=$(ValuePattern)aeTextBox2.GetCurrentPattern(ValuePattern.Pattern);
$80 $$$$$$$$$$$$$$$$vpTextBox2.SetValue("50");
$81 $$$$$$$$$$$$$$$$Thread.Sleep(1500);
$82 $$$$$$$$$$$$$$$$Console.WriteLine("Clickinig$on$button1$Button.");
$83 $$$$$$$$$$$$$$$$//通过 InvokePattern 模拟点击按钮
$84 $$$$$$$$$$$$$$$$InvokePattern$ipClickButton1$=$(InvokePattern)aeButton.GetCurrentPattern(InvokePattern.Pattern);
$85 $$$$$$$$$$$$$$$$ipClickButton1.Invoke();
$86 $$$$$$$$$$$$$$$$Thread.Sleep(1500);
$87
$88 $$$$$$$$$$$$$$$$//验证计算的结果与预期的结果是否相符合
$89 $$$$$$$$$$$$$$$$Console.WriteLine("Checking$textBox3$for$'80'");
$90 $$$$$$$$$$$$$$$$TextPattern$tpTextBox3$=$(TextPattern)aeTextBox3.GetCurrentPattern(TextPattern.Pattern);
$91 $$$$$$$$$$$$$$$$string$result$=$tpTextBox3.DocumentRange.GetText(-1);//获取 textbox3 中的值
$92 $$$$$$$$$$$$$$$$//获取 textbox3 中的值
$93 $$$$$$$$$$$$$$$$//string$result$=$(string)aeTextBox2.GetCurrentPropertyValue(ValuePattern.ValueProperty);
$94 $$$$$$$$$$$$$$$$if$("80"$==$result)
$95 $$$$$$$$$$$$$$$${
$96 $$$$$$$$$$$$$$$$$$$$Console.WriteLine("Found$it.");
$97 $$$$$$$$$$$$$$$$$$$$Console.WriteLine("TTest$scenario:$*PASS*");
$98 $$$$$$$$$$$$$$$$}
$99 $$$$$$$$$$$$$$$$else
100 $$$$$$$$$$$$$$$${
101 $$$$$$$$$$$$$$$$$$$$Console.WriteLine("Did$not$Knd$it.");
102 $$$$$$$$$$$$$$$$$$$$Console.WriteLine("Test$scenario:$*FAIL*");
103 $$$$$$$$$$$$$$$$}
104
105 $$$$$$$$$$$$$$$$Console.WriteLine("Close$application$in$5$seconds.");
106 $$$$$$$$$$$$$$$$Thread.Sleep(5000);
107 $$$$$$$$$$$$$$$$//实现关闭被测试程序
108 $$$$$$$$$$$$$$$$WindowPattern$wpCloseForm$=$(WindowPattern)aeForm.GetCurrentPattern(WindowPattern.Pattern);
109 $$$$$$$$$$$$$$$$wpCloseForm.Close();
110
111 $$$$$$$$$$$$$$$$Console.WriteLine("\nEnd$test$run\n");
112 $$$$$$$$$$$$}
113 $$$$$$$$$$$$catch$(Exception$ex)
114 $$$$$$$$$$$${
115 $$$$$$$$$$$$$$$$Console.WriteLine("Fatal$error:$"$+$ex.Message);
116 $$$$$$$$$$$$}
117 $$$$$$$$}
118 $$$$}
119 }
120
MS 提供的控件 Pattern
$
DockPaernExpandCollapsePaern
GridPaernGridItemPaern
InvokePaernMulpleViewPaern
RangeValuePaernScrollPaern
ScrollItemPaernSeleconPaern
SeleconItemPaernTablePaern
TableItemPaernTextPaern
剩余62页未读,继续阅读
shixuexeon
- 粉丝: 15
- 资源: 53
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 27页智慧街道信息化建设综合解决方案.pptx
- 计算机二级Ms-Office选择题汇总.doc
- 单链表的插入和删除实验报告 (2).docx
- 单链表的插入和删除实验报告.pdf
- 物联网智能终端项目设备管理方案.pdf
- 如何打造品牌的模式.doc
- 样式控制与页面布局.pdf
- 武汉理工Java实验报告(二).docx
- 2021线上新品消费趋势报告.pdf
- 第3章 Matlab中的矩阵及其运算.docx
- 基于Web的人力资源管理系统的必要性和可行性.doc
- 基于一阶倒立摆的matlab仿真实验.doc
- 速运公司物流管理模式研究教材
- 大数据与管理.pptx
- 单片机课程设计之步进电机.doc
- 大数据与数据挖掘.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0