使用UI Automation库用于UI自动化测试


ition(AutomationElement.NameProperty, "ok"));

我们最常用的几个属性就是AutomationID,ControlType,NameProperty了,这几个属性都可以在UI Spy里查到。

4. 如何触发控件的事件。比如,按钮的点击事件,窗口的拖动事件等等。好是来个简单的例子,也是最最常用的例子,按钮的点击:

var button = window.FindFirst(TreeScope.Children, btnCondition);
var clickPattern = (InvokePattern)button.GetCurrentPattern(InvokePattern.Pattern);
clickPattern.Invoke();

我们怎么知道一个控件有哪些Pattern呢,还是看UI Spy。在左边的树目录中右键需要查看的控件,选中“Control Patterns”就可以查看有哪些Pattern,并且可以进行测试。下面这个地址可以查看一共有哪些Control Pattern,需要用到的时候查一下就知道了:

UI Automation Control Patterns Overview 

总结:

可以看出,我上面的例子一共也没多少行,就把UI Automation的基本用法介绍了一遍,这些东西也是最最常使用到的,通常的情况也都能应付过去。如果需要更加深入的内容,就得自己去详细查看MSDN的文档了。

同时,也许你也会发现,这套库用起来比较烦琐,就是简单的查找一个控件也要花费我们不少功夫。所以,我们可以在这套库的基础上去做自己的扩展,编写出一套适合自己的UI自动化库。一个最常见的例子就是做一个安装程序的自动化,我们需要去点击上面的下一步按钮,按钮点击后会进行安装操作,这时候按钮是灰色的,安装完成后,按钮恢复可用状态,然后点击完成。因为需要等待完成按钮出现,在自动化实现过程中我们可以实现一个等待控件的通用函数:

复制代码

static AutomationElement WaitForElement(AutomationElement parent, Condition condition, int milisecondTimeout)
{
    var waitTime = 0;
    var element = parent.FindFirst(TreeScope.Children, condition);

    while (element == null)
    {
        if (waitTime >= milisecondTimeout)
        {
            break;
        }

        Thread.Sleep(500);
        waitTime += 500;

        element = parent.FindFirst(TreeScope.Children, condition);
    }

    return element;
}

复制代码

往往我们使用控件的Name属性来标识,因此,我们可以再一步封装一下:

复制代码

static AutomationElement WaitForElement(int milisecondTimeout, params string[] controlTexts)
{
    var waitTime = 0;
    AutomationElement child = null;

    while (true)
    {
        var parent = AutomationElement.RootElement;
        var founded = true;
        foreach (var text in controlTexts)
        {
            child = WaitForElement(parent, text, 10);
            if (child == null)
            {
                founded = false;
                break;
            }
            parent = child;
        }

        if (founded)
        {
            break;
        }

        if (waitTime >= milisecondTimeout)
        {
            child = null;
            break;
        }

        Thread.Sleep(500);
        waitTime += 500;
    }
    
    return child;
}

复制代码

 因此,我就可以这样来等待一个控件的出现:

var btn = WaitForElement(5000, "安装向导", "完成");

甚至可以把按钮的点击也封装,封装成下面的方式调用,就像在AutoIt脚本里一样简单:

Click("安装向导", "完成");

最后,其实我想说的是,在codeplex上,有一个开源项目White,对UI Automation进行了一些易用性上的封装,非常值得我们去学习和参考,甚至直接拿来使用。下一篇我们将继续学习White测试框架,敬请关注。


行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

  • 18
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值