VS2010测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(下)

VS2010测试功能之旅

——编码的UI测试系列之四:通过编写测试代码的方式建立UI测试(下)

RealZhao,2011年3月23日

回顾

最近比较忙,距离上次更新的时间较久,见谅。

在本章上部分,介绍了“添加用户”窗口的测试代码编写。想必大家也看到了,在UIMap.cs文件中实现自定义编码是一件很轻松的事情,接下来将介绍下个部分,查询用户窗体的测试代码的编写,以及他们测试的关联。

 

示例程序介绍

系统主窗口:(下载点我

该系统拥有两个功能,“添加用户”和“查询用户”

  VS2010测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(下)_第1张图片

点击添加用户后,进入添加用户子窗体:(“添加用户”窗口的测试代码编写在上部分已经实现

VS2010测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(下)_第2张图片

如果在之前的主窗口,点击查询用户,则进入查询用户子窗体

VS2010测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(下)_第3张图片

注:系统默认自带了5个用户TestUser1, TestUser2, TestUser3, TestUser4, TestUser5

这个窗体不会弹任何提示框,默认进入窗体时,DataGridView里面没有加载数据,现在进行一个说明:

查询条件-用户名:表示是否按用户名查询(非模糊查询),如果不输入,默认为不按其查询

查询条件-用户类型:有三个选项“所有”,“管理员”,“一般用户”

查询条件-日期:表示是否按日期查询,如果勾上了日期CheckBox,则旁边的DateTimePicker会启用,然后选择一个具体的日期

按钮-查询:就会按以上条件查询

按钮-重置:用户名清空,用户类型变成所有,日期取消勾选

文本框-用户备注:当查询出数据以后,每选择DataGridView里面中的一行数据,用户备注TextBox会自动加载当前行的用户备注

 

如何设计测试

现在需要明确的就是,我们既需要检查“查询用户”窗口的基本功能,又需要确定之前在“添加用户”窗口添加的用户是否被添加了进来,所以这里的检查尤其重要,根据刚才的功能描述,现在需要编写测试设计。(在看下面的设计之前大家可以先试着自己设计下) 

 

自动化测试,关键不在技术,而是在测试设计上,所以这里需要设计得比较全面

步骤序号

操作步骤

检查点

1

在主窗口菜单点击用户查询

检测查询用户子窗口是否弹出

2

用户名为空,用户类型为“所有”,不勾选时间,点击查询,记录查询出的用户行数,程序默认选中第一行,这时我们选中第二行

检测“用户备注”一列的值是否和下方的“用户备注”文本框的值一致

3

加的用户,其他条件不变,点击查询(例如,在上个部分的示例中,我们使用的是”TestUser6”)

查询出用户名为TestUser6的一条数据

4

用户名为一个不存在的用户“testuser100”,其他条件不变,点击查询

未查询出数据

5

将用户名设置为空,其他条件不变,用户类型为“管理员”,记录查询出的行数

查询出所有为“管理员”的用户(注,为了方便,这里没有使用从数据库比对,而只使用查询条件与查询出的数据比对,实际项目中可能使用数据库比对)

6

将用户类型设置为“一般用户”,其他条件不变,记录查询出的行数

查询出所有为“一般用户”的用户

7

使用刚才用户类型分别为“所有”,“管理员”,“一般用户”查询出的数据行数,进行比对

一般用户行数+管理员用户行数=所有用户行数

8

用户名为空,用户类型为“所有”,勾选时间,并进行选择“2008-1-11”

查询出所有添加时间为“2008-1-11”的用户

9

将条件设置为刚才我们在添加用户窗口添加的用户信息(使用我们在上一个示例中使用的值,如”TestUser6”,”一般用户”,时间为添加时间,时间这个需要用到某个变量来记录

查询出对应的一条数据

10

点击重置按钮

用户名为空,用户类型为“所有”,不勾选时间

11

点击退出

退出窗口

 

接下来将以上的检查点转换为代码

 

对测试进行编码

我们可以接着上次录制的代码来编写,因为在上个部分对于某些编写方式(例如先捕获对象再编写和先录制再转移修改的方式)已经描述得很详细了,下面默认使用这些方式,因此就不一一阐述对象的捕捉过程了。这里只介绍上个部分没有介绍的注意点和和给出主要代码。

 

由于是接着上个部分的代码写,这里需要注释掉AddUserUIMap.cs中Step7_CloseWindows的两句代码,以免他在测试结束后将主窗口关闭掉:

 

 1           public   void  Step7_CloseWindows()
 2          {
 3               // 操作步骤
 4               bool  isClosed;
 5              Mouse.Click( this .UI添加用户Window.UI取消Window.UI取消Button,  new  Point( 1 1 ));
 6               // 和WaitForControlExist相反,这里是最长等待他3秒关闭,如果3秒内关闭返回true,否则为false
 7              isClosed =   this .UI添加用户Window.WaitForControlNotExist( 3000 );
 8              //  这里添上了注释,以免将主窗口关闭掉
 9              //  Mouse.Click(this.UI系统主窗口Window.UI系统主窗口TitleBar.UICloseButton, new Point(1, 1));
10              //  isClosed &= this.UI系统主窗口Window.WaitForControlNotExist(3000);
11 
12               // 检查点
13              Assert.IsTrue(isClosed,  " 点击退出,检测是否退出添加用户子窗体和主窗体失败 " );
14          }

 

接下来,我们通过在项目中添加新项的方式新建一个SearchUserUIMap.uitest,在这个UIMap的.cs中来编写我们对于“查询用户”这个窗口的操作

 

实现步骤1

步骤序号

操作步骤

检查点

1

在主窗口菜单点击用户查询

检测查询用户子窗口是否弹出

 

相信这个很简单,两下就可以通过录制然后修改的方式编写出来:

 

1           public   void  Step1_ClickSearchUser()
2          {
3              WinMenuItem uI查询用户MenuItem  =   this .UI系统主窗口Window.UIMenuStrip1MenuBar.UI用户管理MenuItem.UI查询用户MenuItem;
4               // 操作步骤:Click '用户管理' -> '查询用户' menu item
5              Mouse.Click(uI查询用户MenuItem,  new  Point( 1 1 ));
6 
7               // 检查点:检查查询用户子窗口是否弹出
8              Assert.IsTrue( this .UI查询用户Window.WaitForControlExist( 6000 ),  " 点击查询用户,检测查询用户子窗口弹出失败 " );        
9          }

 

实现步骤2

步骤序号

操作步骤

检查点

2

用户名为空,用户类型为“所有”,不勾选时间,点击查询,记录查询出的用户行数,程序默认选中第一行,这时我们选中第二行

检测“用户备注”一列的值是否和下方的“用户备注”文本框的值一致

 

这一步需要注意的就是,首先这里有一个选行的操作,然后需要从表里单元格当中取值,最后与文本框的值进行比对,这里之所以需要记录这个RowCount,是因为在步骤7的时候会用于比对,

这里需要用准星首先捕获到这个GridViewTable,然后将其添加到对象库:

VS2010测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(下)_第4张图片

 

然后才开始录制并编写代码,如下

 

 1           public int AllUser;//注意,这里留一个字段来保存行数
 2 
 3           public   void  Step2_SearchWithOutCondition()
 4          {
 5              WinButton uI查询Button  =   this .UI查询用户Window.UI查询Window.UI查询Button;
 6               // 操作步骤
 7              Mouse.Click(uI查询Button,  new  Point( 1 1 )); // Click '查询' button
 8              System.Threading.Thread.Sleep( 3000 ); // 等待3秒,应付可能出现的查询延时
 9              AllUser  =   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count; // 获取行数
10              WinRow row2  =   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows[ 1 as  WinRow;
11              Mouse.Click(row2.Cells[ 0 ],  new  Point( 10 10 )); // 点击第二行第一个单元格,用以将第二行其选中
12              System.Threading.Thread.Sleep( 1000 ); // 等待1秒,应付可能出现的查询延时
13 
14               // 检查点:检测“用户备注”一列的值是否和下方的“用户备注”文本框的值一致
15              Assert.AreEqual( this .UI查询用户Window.UITbx_MemoWindow.UITbx_MemoEdit.Text,((WinCell)row2.Cells[ 4 ]).Value, " 检测“用户备注”一列的值是否和下方的“用户备注”文本框的值一致失败 " );
16          }

 

实现步骤3

步骤序号

操作步骤

检查点

3

用户名为刚才我们在添加用户窗口添加的用户,其他条件不变,点击查询(例如,在上个部分的示例中,我们使用的是”TestUser6”)

查询出用户名为TestUser6的一条数据

 

步骤3和步骤4是对用户名这个维度来进行测试,需要和上一个模块对接,因为在上一个模块添加了一个用户,所以这里需要检查是否能够查询出来,需要确定的就是RowCount=1并且第一行第一列数据为”TestUser6”才算正确,代码如下

 

 1           public   void  Step3_SearchWithUidOnly()
 2          {
 3               string  NewUser  =   " TestUser6 " ;
 4              WinEdit uITbx_UserNameEdit  =   this .UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
 5              WinButton uI查询Button  =   this .UI查询用户Window.UI查询Window.UI查询Button;
 6               // 操作步骤
 7              uITbx_UserNameEdit.Text  =  NewUser;
 8              Mouse.Click(uI查询Button,  new  Point( 1 1 )); // Click '查询' button
 9              System.Threading.Thread.Sleep( 3000 ); // 等待3秒,应付可能出现的查询延时
10 
11               // 检查点:查询出用户名为TestUser6的一条数据
12               bool  isValid  =   1 == this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count;
13              WinCell cell  =  ((WinRow)UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows[ 0 ]).Cells[ 1 as  WinCell;
14              isValid  &=  cell.Value  ==  NewUser;
15              Assert.IsTrue(isValid,  " 查询出用户名为 " + NewUser + " 的一条数据失败 " );        
16          }

 

实现步骤4

步骤序号

操作步骤

检查点

4

用户名为一个不存在的用户“testuser100”,其他条件不变,点击查询

未查询出数据

 

这是一个反例的测试,很明显只要RowCount为0就可以通过测试

 

 1           public   void  Step4_SearchWithUidNotExist()
 2          {
 3               string  ErrorUser = " TestUser1000 " ;
 4              WinEdit uITbx_UserNameEdit  =   this .UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
 5              WinButton uI查询Button  =   this .UI查询用户Window.UI查询Window.UI查询Button;
 6               // 操作步骤
 7              uITbx_UserNameEdit.Text  =  ErrorUser;
 8              Mouse.Click(uI查询Button,  new  Point( 1 1 )); // Click '查询' button
 9              System.Threading.Thread.Sleep( 3000 ); // 等待3秒,应付可能出现的查询延时
10 
11               // 检查点:未查询出数据
12              Assert.IsTrue( 0   ==   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count,  " 未查询出数据失败 " );
13          }

 

实现步骤5

步骤序号

操作步骤

检查点

5

将用户名设置为空,其他条件不变,用户类型为“管理员”,记录查询出的行数

查询出所有为“管理员”的用户(注,为了方便,这里没有使用从数据库比对,而只使用查询条件与查询出的数据比对,实际项目中可能使用数据库比对)

 

步骤5,6,7是对用户类型这个维度来进行测试,在步骤5中,我们需要遍历每一行中的“用户类型”列,判断他是不是等于“管理员”,并记录一共查询出多少条数据

 

 1           public int AdminUser;//注意,这里留一个字段来保存管理员用户的行数
 2 
 3           public   void  Step5_SearchWithAdminOnly()
 4          {
 5               string  UserType  =   " 管理员 " ;
 6              WinEdit uITbx_UserNameEdit  =   this .UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
 7              WinComboBox uI用户类型ComboBox  =   this .UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
 8              WinButton uI查询Button  =   this .UI查询用户Window.UI查询Window.UI查询Button;
 9               // 操作步骤
10              uITbx_UserNameEdit.Text  =   "" ;
11              uI用户类型ComboBox.SelectedItem  =  UserType;
12              Mouse.Click(uI查询Button,  new  Point( 1 1 )); // Click '查询' button
13              System.Threading.Thread.Sleep( 3000 ); // 等待3秒,应付可能出现的查询延时
14              AdminUser  =   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count; // 获取行数
15 
16               // 检查点:查询出所有为“管理员”的用户
17               bool  isValid  =   true ;
18               foreach  (WinRow winrow  in   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows)
19              {
20                  isValid  &=  ((winrow.Cells[ 2 as  WinCell).Value  ==  UserType);
21              }
22              Assert.IsTrue(isValid,  " 查询出所有为“管理员”的用户失败 " );
23          }

 

实现步骤6

步骤序号

操作步骤

检查点

6

将用户类型设置为“一般用户”,其他条件不变,记录查询出的行数

查询出所有为“一般用户”的用户

 

和步骤5是一样的,需要遍历每一行中的“用户类型”列,判断他是不是等于“一般用户”,并记录一共查询出多少条数据

 

 1           public int NormalUser;//注意,这里留一个字段来保存一般用户的行数
 2 
 3           public   void  Step6_SearchWithNormalUserOnly()
 4          {
 5               string  UserType  =   " 一般用户 " ;
 6              WinEdit uITbx_UserNameEdit  =   this .UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
 7              WinComboBox uI用户类型ComboBox  =   this .UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
 8              WinButton uI查询Button  =   this .UI查询用户Window.UI查询Window.UI查询Button;
 9               // 操作步骤
10              uITbx_UserNameEdit.Text  =   "" ;
11              uI用户类型ComboBox.SelectedItem  =  UserType;
12              Mouse.Click(uI查询Button,  new  Point( 1 1 )); // Click '查询' button
13              System.Threading.Thread.Sleep( 3000 ); // 等待3秒,应付可能出现的查询延时
14              NormalUser  =   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count; // 获取行数
15 
16               // 检查点:查询出所有为“一般用户”的用户
17               bool  isValid  =   true ;
18               foreach  (WinRow winrow  in   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows)
19              {
20                  isValid  &=  ((winrow.Cells[ 2 as  WinCell).Value  ==  UserType);
21              }
22              Assert.IsTrue(isValid,  " 查询出所有为“一般用户”的用户失败 " );
23          }

 

实现步骤7

步骤序号

操作步骤

检查点

7

使用刚才用户类型分别为“所有”,“管理员”,“一般用户”查询出的数据行数,进行比对

一般用户行数+管理员用户行数=所有用户行数

 

现在应该了解之所以需要记录下不同用户类型记录数的原因了吧?代码如下:

 

1           public   void  Step7_ValidUserCount()
2          {
3              Assert.AreEqual(AdminUser  +  NormalUser, AllUser,  " 检查'一般用户行数+管理员用户行数=所有用户行数'失败 " );
4          }

 

实现步骤8

步骤序号

操作步骤

检查点

8

用户名为空,用户类型为“所有”,勾选时间,并进行选择“2008-1-11”

查询出所有添加时间为“2008-1-11”的用户

 

步骤8是对时间维度进行一个测试,现在如果我们选择了2008-1-11,那么只需要遍历查询出的各行的“时间”一列是不是为2008-1-11

 

 1          public   void  Step8_SearchWithDateOnly()
 2          {
 3               string  DateTimeAsString  =   " 2008-1-11 " ;
 4              WinEdit uITbx_UserNameEdit  =   this .UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
 5              WinComboBox uI用户类型ComboBox  =   this .UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
 6              WinCheckBox uI日期CheckBox  =   this .UI查询用户Window.UI日期Window.UI日期CheckBox;
 7              WinDateTimePicker uIDtp_AddTimeDateTimePicker  =   this .UI查询用户Window.UIDtp_AddTimeWindow.UIDtp_AddTimeDateTimePicker;
 8              WinButton uI查询Button  =   this .UI查询用户Window.UI查询Window.UI查询Button;
 9 
10               // 操作步骤
11              uITbx_UserNameEdit.Text  =   "" ;
12              uI用户类型ComboBox.SelectedItem  =   " 所有 " ;
13              uI日期CheckBox.Checked  =   true ;
14              uIDtp_AddTimeDateTimePicker.DateTimeAsString  = DateTimeAsString;
15              Mouse.Click(uI查询Button,  new  Point( 1 1 )); // Click '查询' button
16              System.Threading.Thread.Sleep( 3000 ); // 等待3秒,应付可能出现的查询延时
17 
18               // 检查点:查询出所有为“2008-1-11”的用户
19               bool  isValid  =   true ;
20               foreach  (WinRow winrow  in   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows)
21              {
22                   string [] DateNumbers  =  DateTimeAsString.Split( ' - ' );
23                  DateTime dt =  Convert.ToDateTime((winrow.Cells[ 3 as  WinCell).Value);
24                  isValid  &=  Convert.ToInt32(DateNumbers[ 0 ])  ==  dt.Year;
25                  isValid  &=  Convert.ToInt32(DateNumbers[ 1 ])  ==  dt.Month;
26                  isValid  &=  Convert.ToInt32(DateNumbers[ 2 ])  ==  dt.Day;
27              }
28              Assert.IsTrue(isValid,  " 查询出所有为“2008-1-11”的用户失败 " );
29          }

 

实现步骤9

步骤序号

操作步骤

检查点

9

将条件设置为刚才我们在添加用户窗口添加的用户信息(使用我们在上一个示例中使用的值,如”TestUser6”,”一般用户”,时间为添加时间,时间这个需要用到某个变量来记录

查询出对应的一条数据

 

步骤9是进行一次复合条件查询的测试,这次测试就用到之前我们在添加用户的时候的数据,需要注意的是,因为添加时间是不确定的,所以我们需要修改之前录制的代码,将他的值赋给一个变量,需要修改的AddUserUiMap.cs中的方法Step6_AddUserSuccess,让其有一个返回值返回当前时间,代码如下:

 

 1           public   DateTime  Step6_AddUserSuccess()
 2          {
 3               // 操作步骤
 4               this .UI添加用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit.Text  =   " TestUser6 " ;
 5               this .UI添加用户Window.UICbx_UserTypeWindow.UI用户类别ComboBox.SelectedItem  =   " 一般用户 " ;
 6               this .UI添加用户Window.UITbx_MemoWindow.UITbx_MemoEdit.Text  =   " Test " ;
 7              Mouse.Click( this .UI添加用户Window.UI添加Window.UI添加Button,  new  Point( 1 1 ));
 8 
 9               // 检查点:首先检查3秒内是否有弹出框弹出,如果有,则检查文本是否是"添加成功!"
10               this .mUI弹出框Window  =   new  UI弹出框Window();
11               bool  isPopUp  =   this .UI弹出框Window.UI弹出框Text.WaitForControlExist( 3000 );
12              Assert.IsTrue(isPopUp && this .UI弹出框Window.UI弹出框Text.DisplayText  ==   " 添加成功! " " 输入正确,检测弹出“添加成功!”失败 " );
13              Mouse.Click( this .UIOKWindow.UIOKButton,  new  Point( 1 1 ));
14               // 这里是新添加的代码
15               return   DateTime.Now;
16          }

 

然后现在在这里引用之前的变量,来进行操作,代码如下

 

 1          public   void  Step9_SearchWithAllCondition( DateTime addTime )
 2          {
 3               string  UserName  =   " TestUser6 " ;
 4               string  UserType  =   " 一般用户 " ;
 5               string  AddTime  =  addTime.Year  +   " - "   +  addTime.Month  +   " - "   +  addTime.Day;
 6 
 7              WinEdit uITbx_UserNameEdit  =   this .UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
 8              WinComboBox uI用户类型ComboBox  =   this .UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
 9              WinCheckBox uI日期CheckBox  =   this .UI查询用户Window.UI日期Window.UI日期CheckBox;
10              WinDateTimePicker uIDtp_AddTimeDateTimePicker  =   this .UI查询用户Window.UIDtp_AddTimeWindow.UIDtp_AddTimeDateTimePicker;
11              WinButton uI查询Button  =   this .UI查询用户Window.UI查询Window.UI查询Button;
12 
13               // 操作步骤
14              uITbx_UserNameEdit.Text  =  UserName;
15              uI用户类型ComboBox.SelectedItem  =  UserType;
16              uI日期CheckBox.Checked  =   true ;
17              uIDtp_AddTimeDateTimePicker.DateTimeAsString  =  AddTime;
18              Mouse.Click(uI查询Button,  new  Point( 1 1 )); // Click '查询' button
19              System.Threading.Thread.Sleep( 3000 ); // 等待3秒,应付可能出现的查询延时
20 
21               // 检查点:查询出用户名为TestUser6的一条数据
22               bool  isValid  =   1   ==   this .UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count;
23              WinCell cell  =  ((WinRow)UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows[ 0 ]).Cells[ 1 as  WinCell;
24              isValid  &=  cell.Value  ==  UserName;
25              Assert.IsTrue(isValid,  " 查询出用户名为 "   +  UserName  +   " 的一条数据失败 " );   
26          }

 

实现步骤10

步骤序号

操作步骤

检查点

10

点击重置按钮

用户名为空,用户类型为“所有”,不勾选时间

 

这一步很简单,几乎没什么说的,只是需要注意的是最好加个等待时间,代码如下:

 

 1           public   void  Step10_ClickReset()
 2          {
 3              WinEdit uITbx_UserNameEdit  =   this .UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
 4              WinComboBox uI用户类型ComboBox  =   this .UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
 5              WinCheckBox uI日期CheckBox  =   this .UI查询用户Window.UI日期Window.UI日期CheckBox;
 6              WinButton uI重置Button  =   this .UI查询用户Window.UI重置Window.UI重置Button;
 7 
 8               // 操作步骤
 9              Mouse.Click(uI重置Button,  new  Point( 25 14 ));
10              System.Threading.Thread.Sleep( 1000 ); // 等待1秒,应付可能出现的查询延时
11 
12               // 检查点:用户名为空,用户类型为“所有”,不勾选时间
13               bool  isValid  =   true ;
14              isValid  &=   string .IsNullOrEmpty(uITbx_UserNameEdit.Text);
15              isValid  &=  uI用户类型ComboBox.SelectedItem  ==   " 所有 " ;
16              isValid  &=   ! uI日期CheckBox.Checked;
17              Assert.IsTrue(isValid,  " 重置失败 " );  
18 
19          }

 

实现步骤11

步骤序号

操作步骤

检查点

11

点击退出

退出窗口

 

这一步也很简单,和上个部分提到的一样,代码如下:

 

1           public   void  Step11_CloseWindow()
2          {
3              Mouse.Click( this .UI查询用户Window.UI查询用户TitleBar.UICloseButton,  new  Point( 1 1 ));
4              Mouse.Click( this .UI系统主窗口Window.UI系统主窗口TitleBar.UICloseButton,  new  Point( 1 1 ));
5              Assert.IsTrue( this .UI系统主窗口Window.WaitForControlNotExist( 3000 ),  " 退出失败 " );
6          }

 

总结

在本章,介绍了通过编码的方式来建立UI测试,,相信大家在看完了以后,应该能够完全自己用VS2010提供的UI测试进行实际项目测试了。如果需要调用刚才所写的方法,只需要再新建一个编码的UI测试,例如将其命名为CodedUITest1.cs,然后在内部添加一个这样的调用即可

 

 1          [TestMethod]
 2           public   void  CodedUITestMethod1()
 3          {
 4              DateTime addTime;
 5 
 6              AddUserUIMapClasses.AddUserUIMap addUserUIMap  =   new  AddUserUIMapClasses.AddUserUIMap();
 7              addUserUIMap.Step1_LoginSystem();
 8              addUserUIMap.Step2_ClickAddUser();
 9              addUserUIMap.Step3_AddUserWithNoName();
10              addUserUIMap.Step4_AddUserWithOverlapName();
11              addUserUIMap.Step5_AddUserWithNoMemo();
12              addTime  =  addUserUIMap.Step6_AddUserSuccess(); // 这里要特别注意,有一个返回值
13              addUserUIMap.Step7_CloseWindows();
14 
15              SearchUserUIMapClasses.SearchUserUIMap searchUserUIMap  =   new  SearchUserUIMapClasses.SearchUserUIMap();
16              searchUserUIMap.Step1_ClickSearchUser();
17              searchUserUIMap.Step2_SearchWithOutCondition();
18              searchUserUIMap.Step3_SearchWithUidOnly();
19              searchUserUIMap.Step4_SearchWithUidNotExist();
20              searchUserUIMap.Step5_SearchWithAdminOnly();
21              searchUserUIMap.Step6_SearchWithNormalUserOnly();
22              searchUserUIMap.Step7_ValidUserCount();
23              searchUserUIMap.Step8_SearchWithDateOnly();
24              searchUserUIMap.Step9_SearchWithAllCondition(addTime); // 这里要特别注意,有一个参数
25              searchUserUIMap.Step10_ClickReset();
26              searchUserUIMap.Step11_CloseWindow(); 
27          }

 

示例程序的下载:下载点我

个人录制的源代码下载:下载点我

在下一章,将会介绍如何建立数据驱动的测试,敬请关注。

 

附:发布计划

编码的UI测试系列之一:入门篇 一个简单的示例(Released)

编码的UI测试系列之二:入门篇 操作动作的录制原理(上)(Released)

编码的UI测试系列之二:入门篇 操作动作的录制原理(下)(Released)

编码的UI测试系列之三:入门篇 操作对象的识别原理 (Released)

编码的UI测试系列之四:进阶篇 通过编写测试代码的方式建立UI测试(上)(Released)

编码的UI测试系列之四:进阶篇 通过编写测试代码的方式建立UI测试(下)(Released)

编码的UI测试系列之五:进阶篇 常用测试要点和函数(1

编码的UI测试系列之六:进阶篇 常用测试要点和函数(2

编码的UI测试系列之七:进阶篇 UI测试之间的互相引用和测试组织

编码的UI测试系列之八:高级篇 远程调用其他机器进行测试

编码的UI测试系列之九:高级篇 使用MS测试管理器组织测试

 

你可能感兴趣的:(VS2010)