搭建WPF上的UI自动化测试框架

发表于:2023-8-07 09:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:胡庆访    来源:博客园

  简要说明
  OEA 1.0-2.0 框架中,界面都是以 WPF 技术作为基础平台开发的。我们需要对开发出来的系统进行自动化测试,而 .NET 平台的自动化测试平台在公司内部还没有其它部门完成,所以我们在使用 Ruby + VS UIUnitTest 开发了一个 UI 自动化(UI Automation,以下简称为UIA)框架,估且称其为 UIA 1.0。
  使用演示
  接下来,简单以我们目前的一个模块来说明一下 OEA 中的 UIA 是如何使用的。
  测试人员会在 UIA 相应的工程中加入某个模块的 UIA 测试类,例如下图中的 PBS模板.cs 就是这个模块对应的测试:
  其对应的代码如下:
  class PBS模板 : GIX4测试用例
  {
      protected override void 运行()
      {
          打开当前测试模块("模板管理.PBS模板");
          添加();
          进入窗口("添加记录", 添加记录窗口 =>
          {
              属性编辑器("编码").输入("AutoTest01");
              属性编辑器("名称").输入("自动化测试-PBS模板");
              属性编辑器("备注").输入("测试模板");
              点击按钮("确定");
              保存();
          });
          //# 3 编辑PBS树>>>>>等待对树当前行的支持<<<<<
          进入页签("PBS", PBS页签 =>
          {
              树型操作按钮通用测试();
              保存();
              进入页签("属性", 属性页签 =>
              {
                  树型操作按钮通用测试();
                  保存();
                  进入页签("可选值", 可选值页签 =>
                  {
                      添加();
                      列表().当前行().属性编辑器("可选值").输入("AutoTest");
                      保存();
                      复制添加();
                      保存();
                      按住Ctrl();
                      列表().选择行(0);
                      释放Ctrl();
                      删除();
                      保存();
                  });
              });
              //#6 载入标准模板窗口中各页签
              点击按钮("载入标准模板");
              进入窗口("载入标准模板", 载入标准模板窗口 =>
              {
                  页签("分部分项").单击();
                  页签("措施项目").单击();
                  页签("其它项目").单击();
                  页签("规费税金").单击();
                  点击按钮("确定");
              });
          });
          //#6 修改PBS模板信息
          点击按钮("修改");
          进入窗口("修改", 修改窗口 =>
          {
              属性编辑器("编码").输入("AutoTest01-1");
              属性编辑器("名称").输入("自动化测试-PBS模板-1");
              属性编辑器("备注").输入("测试模板-1");
              点击按钮("确定");
          });
          保存();
          删除并确定();
      }
  }
  UIA 测试环境就是一个简单的 WPF Applicatoin:
  之前代码对应的软件运行时界面:
  UIA 框架结构及相关重点
  在整个 OEA 框架中,UIA 框架是一个重要的组成部分。目前只是实现了 WPF 客户端的 UIA,Web 的 UIA 将会在需要时添加:
  OEA-UIA 的设计主要是基于 VS CodedUITest 中的核心类库,进行二次封装,提供更方便 OEA、更方便测试人员的的许多接口。引入如下类库:
  其中的代码也不复杂,主要是在 WpfControl(继承自 UITestControl)的相关类型上添加一系列扩展方法,以下以一个按钮的点击为例:
  public static WpfButton 按钮(this WpfControl context, string title = null)
  {
      return context.Find<WpfButton>(title);
  }
  public static WpfControl 单击(this WpfControl control)
  {
      control.EnsureClickable();
      control.WaitForControlEnabled();
      Mouse.Click(control);
      return control;
  }
  public static TControl Find<TControl>(this WpfControl context, string title = null)
      where TControl : WpfControl, new()
  {
      //if (TestContext.Current.NeedCancel) Playback.Cancel();
      if (TestContext.Current.NeedCancel) throw new StopUIAException("停止自动化测试!");
      var control = new TControl();
      if (context != null)
      {
          control.Container = context;
      }
      if (!string.IsNullOrEmpty(title))
      {
          control.SearchProperties[WpfControl.PropertyNames.Name] = title;
      }
      return control;
  }
  这样,就可以在任何一个 WpfControl 容器上使用(例如页签 A) A.按钮(“添加”).单击() 了。
  这里,需要特别说明的是,其实 UIAutomationClient 以及 UIAutomationTypes 并不是 VS CodedUITest 独有的程序集,而是 Windows 平台上的自动化框架程序集,相关的内容,可以看 MSDN 中的《MSDN - Accessibility》。基于这个框架,理论上可以做 windows 平台上所有的应用程序的自动化测试。
  在我们 UIA 中,Windows Automation API 用于一些更加底层的控件查找场景。这是因为使用 VS CodedUITest 的类库,有时候并不能找到想要的控件,同时也不能为 OEA WPF 程序做一些深度的定制。OEA 中目前现在开发的 Web 框架,也同样会使用它来构建 UIA。
  总结
  其实这次重构并没有修改 UIA 1.0 版本的整个结构,主要是修改了语言环境为 .NET 环境,使得可以更加方便地添加各种功能,以及更好地和 OEA 框架整合。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号