赞
踩
故事的开始,是这样的。。。
我在对一个功能进行测试,测试的目的就是获得期待的对话框,并且验证对话框中的内容。有一点值得提及,对话框的出现是没有任何规律的,这就意味着需要等待很长的时间才能看见期待的对话框;或者对话框的出现是非常频繁的,这意味着测试用例的书写,是为了验证各种不同的对话框。
时间久了,我在也无法忍受等待与平凡的手动验证,这让我感觉很是乏味。但是,转念一想,毕竟自己非常熟悉软件自动化测试,干嘛留着这么多手动测试用例,和恼人的点击给自己?于是,就有了下面篇幅 --- 通过UIAutomation查找由应用程序产生的对话框(MessageBox)。
(一) 准备工作
(0) 自己写个Windows Form程序,添加一个Button,为Button添加Click事件,弹出MessageBox。
(1) 新建一个C#控制台应用程序
(2) 添加应用dll -> UIAutomationClient,UIAutomationType
(3) 下载一个UISpye。
(二) 你需要知道的一些东西
(1) C#语法。别告诉我你不知道这个?基本的总该懂点吧?好吧,C语言懂么?
(2) UIAutomationClient。提供客户端的一些API,说简单些这个.dll可以让你与应用程序交互。
(3) UIAutomationType。包括一些控件的类型信息,如按钮,窗体,复选框等等。
(4) Control Type。代表一个控件的类型。如按钮,树视图等等。
(5) Control Parttern。代表一个控件的模式,比如下拉列表是Control Type,但是它的下拉展开列表选项就是Control Pattern了。
(6) AutomationElement。UIA中将所有的控件看作是AutomationElement,所有的UI在windows里面表现为一个树型结构,根节点是桌面。
(三) 让我们开始吧!
(1) 编写一个函数,通过窗体的名字来获得窗体的一个AutomationElement对象。
解释一下,创建了两个PropertyCondition,用于生成属性条件。这里定义了两个,名字属性以及类型属性,并将两个属性组合起来, 最后找到第一个符合条件的元素。
(2) 再写个函数,通过元素的AutomationId获得一个AutomationElement对象。
解释一下,同上。
(3) 基本的工作都做完了,下面可以进行应用了。
a) 把先前写的那个Windows Form程序打开,点击按钮,让MessageBox弹出来。
b) 调用GetWindowsByName,获得窗体。
解释一下,AutomationElement.RootElement即代表了桌面,也即是根节点。“Form1”即是窗体的名字。如果不知道窗体的名字,那么UISpy就派上用场了,你所需要做的就是启动UISpy,展开Form1节点,后续的就不用我多说了吧!
c) 找到对话框。
d) 找到OK按钮。
解释一下,“65535”这是ok按钮的AutomationId,具体的ID我记不大清了,非常抱歉,个人电脑上没装UISpy。现在好了,你应景获得了OK按钮了,接下了就是要点击它。是不是感觉很酷呢?(我听见有人说没有了,哈!)
e) 获得InvokePattern。
解释一下,需要解释么?所有你不懂的,msdn一下你就上当,呵呵。
f) WOW~~是不是很酷,这真是太棒了。
好了,我也要睡觉了,晚安!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。