VS2010測試功能之旅:編碼的UI測試(2)-操作動作的錄制原理(上)

作者: RealDigit  來源: 博客園  發布時間: 2011-03-15 11:51  閱讀: 2626 次  推薦: 0   原文鏈接   [收藏]  

  回顧 

  在之前我們介紹了如何用VS2010UI測試功能創建一個簡單的示例,大致描述了如何使用編碼的UI測試進行錄制和回放,在這章會著重描述VS2010是如何錄制操作,并且生成代碼,以及初步介紹如何通過自己寫代碼的方式進行測試。

  內容簡介 

  在上一章我們已經介紹過,建立一個編碼的UI測試CodedUITest1.cs,錄制完成之后,會自動生成一個UIMap1.uitest文件。

 1:錄制完成后自動生成的UIMap1.uitest文件 

  事實上,在錄制過程中起著關鍵作用的并非是CodedUITest1.cs,而是UIMap1.uitest,在錄制過程中的所有代碼都是生成在UIMap1.uitest,所有對于界面的操作,測試的判斷也是在UIMap1.uitest文件完成,CodedUITest1.cs僅僅只是調用UIMap1.uitest中的方法(換言之只是個軀殼,編碼的UI測試的靈魂還是在UIMap1.uitest)。

  明白此點之后,接下來我們只需著重研究研究UIMap1.uitest即可,看看他是如何錄制并生成代碼的

  注:這一章的內容可能較之第一章比較難,在閱讀的時候可盡量使用VS2010進行操作,便于理解。由于本章內容較長,分為兩個部分,上部分介紹原理,下部分介紹通過修改UIMap1.uitest控制操作步驟代碼的生成,預計在周六或者周日發出

  UIMap的錄制與生成 

  首先我們新建一個測試項目:

 2:新建項目

  建成之后,(可以看到系統自動默認生成了一個UnitTest.cs,我們可以先將它刪除),右擊該項目,選擇添加à添加新項(注意,不是添加測試,是添加新項),在新項中選擇Coded UI Test Map(編碼的UI測試映射)。

 3:添加編碼的UI測試映射

   現在我們建立了一個UIMap1.uitest(可以看到這個UIMap1.uitest還沒有生成UIMap1.csUIMap1.Designer.cs)。

4UIMap1.uitest

   可以雙擊打開UIMap1.uitest,文件里面沒有什么特殊的內容:

 
<?xml version="1.0"?>

<UITest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="" Id="3efe829a-76df-439e-af0d-8d5c62727a1e" AssemblyVersion="10.0.21008.0" Version="1.0" xmlns="http://schemas.microsoft.com/VisualStudio/TeamTest/UITest/2010">

</UITest>

  右擊該UIMap1.uitest,選則Edit With Coded UI Test Builder(使用編碼的UI測試生成器進行編輯),接下來會彈出錄制操作用的生成器。

5Edit With Coded UI Test Builder

  我們還是按照上一中使用的示例程序和操作步驟進行錄制四個方法InputErrorUidPwd()AssertErrorWinow()InputRightUidPwd()AssertRightWinow(),(可再添加一個方法CloseWindow(),關閉這個示例程序,上一章沒有提到)操作完畢之后,生成代碼,我們可以看到UIMap1.csUIMap1.Designer.cs已經自動生成,而實際有生成代碼的文件為UIMap1.uitestUIMap1.Designer.csUIMap1.cs則為空。

  現在可以一個個進去看看生成的代碼(注:由于錄制過程中的操作步驟每個人都可能有細微差別,例如點擊坐標,這里我錄的示例和大家實驗的時候自己錄的可能存在一些區別,你懂的)。

  首先是UIMap1.uitest,大家可以看到這里的代碼實在是多得看不清,如果覺得閱讀比較困難,可以跳過此段,先看看解釋說明,然后再回來看。

  UIMap.uitest
View Code
 
<?xml version="1.0"?>
<UITest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="" Id="3efe829a-76df-439e-af0d-8d5c62727a1e" AssemblyVersion="10.0.21008.0" Version="1.0" xmlns="http://schemas.microsoft.com/VisualStudio/TeamTest/UITest/2010">
<Configuration>
<Group Name="IE">
<Setting Name="Version" Value="8.0.6001.18702" WarningLevel="1" />
<Setting Name="InformationBar" WarningLevel="1" />
<Setting Name="AutoCompletePassword" WarningLevel="1" />
<Setting Name="AutoCompleteForm" Value="no" WarningLevel="1" />
<Setting Name="DefaultBrowser" Value="IEXPLORE.EXE" WarningLevel="1" />
<Setting Name="PopupBlocker" Value="1" WarningLevel="1" />
<Setting Name="TabbedBrowsing" Value="0" WarningLevel="2" />
<Setting Name="InternetZoneSecurity" Value="66816" WarningLevel="2" />
<Setting Name="IntranetZoneSecurity" Value="69632" WarningLevel="2" />
<Setting Name="TrustedZoneSecurity" Value="70912" WarningLevel="2" />
<Setting Name="RestrictedZoneSecurity" Value="73728" WarningLevel="2" />
<Setting Name="PhishingFilter" WarningLevel="1" />
<Setting Name="EnhancedSecurityConfiguration" WarningLevel="1" />
</Group>
<Group Name="OS">
<Setting Name="Name" Value="Microsoft Windows XP Professional" WarningLevel="2" />
<Setting Name="Version" Value="Microsoft Windows NT 5.1.2600 Service Pack 3" WarningLevel="2" />
<Setting Name="IsUserAdmin" Value="True" WarningLevel="2" />
<Setting Name="Is64BitOperatingSystem" Value="False" WarningLevel="2" />
<Setting Name="IsTerminalServerSession" Value="False" WarningLevel="2" />
<Setting Name="OSLanguage" Value="1033" WarningLevel="1" />
<Setting Name="UserLocale" Value="1033" WarningLevel="1" />
<Setting Name="DragFullWindows" Value="True" WarningLevel="2" />
<Setting Name="ScreenResolutionWidth" Value="1440" WarningLevel="2" />
<Setting Name="ScreenResolutionHeight" Value="900" WarningLevel="2" />
<Setting Name="SystemDPIX" Value="96" WarningLevel="2" />
<Setting Name="SystemDPIY" Value="96" WarningLevel="2" />
<Setting Name="Aero" WarningLevel="1" />
<Setting Name="UACEnabled" WarningLevel="2" />
<Setting Name="UACPromptEnabled" WarningLevel="1" />
<Setting Name="WindowsAccessibilityAPIVersion" Value="2.0" WarningLevel="1" />
</Group>
<Group Name="TechnologyManagers">
<Setting Name="Web" WarningLevel="1" />
<Setting Name="UIA" WarningLevel="1" />
</Group>
</Configuration>
<InitializeActions />
<ExecuteActions>
<SetValueAction UIObjectName="UIMap1.UI 系統登錄Window.UITbx_uidWindow.UITbx_uidEdit">
<ParameterName />
<Value Encoded="false">errorUid</Value>
<Type>String</Type>
</SetValueAction>
<SetValueAction UIObjectName="UIMap1.UI 系統登錄Window.UITbx_pwdWindow.UITbx_pwdEdit">
<ParameterName />
<Value Encoded="false">errorPwd</Value>
<Type>String</Type>
</SetValueAction>
<MouseAction UIObjectName="UIMap1.UI 系統登錄Window.UI登錄Window.UI登錄Button">
<ParameterName />
<ModifierKeys>None</ModifierKeys>
<IsGlobalHotkey>false</IsGlobalHotkey>
<Location X="25" Y="6" />
<WheelDirection>0</WheelDirection>
<ActionType>Click</ActionType>
<MouseButton>Left</MouseButton>
</MouseAction>
<TestStepMarkerAction MarkerInformation="InputErrorUidPwd">
<ParameterName />
<StepId>-1</StepId>
<Direction>Start</Direction>
<Outcome />
<Disabled>false</Disabled>
<WorkItemId>0</WorkItemId>
<MarkerRegionType>Action</MarkerRegionType>
</TestStepMarkerAction>
<AssertAction UIObjectName="UIMap.UI 提示Window.UI用戶名或密碼錯誤Window.UI用戶名或密碼錯誤Text">
<ParameterName />
<PropertyName>Exists</PropertyName>
<ExpectedValue>True</ExpectedValue>
<Type>Boolean</Type>
<PropertyCondition>AreEqual</PropertyCondition>
</AssertAction>
<TestStepMarkerAction MarkerInformation="AssertErrorWinow">
<ParameterName />
<StepId>-1</StepId>
<Direction>Start</Direction>
<Outcome />
<Disabled>false</Disabled>
<WorkItemId>0</WorkItemId>
<MarkerRegionType>Assertion</MarkerRegionType>
</TestStepMarkerAction>
<MouseAction UIObjectName="UIMap1.UI 提示Window.UIOKWindow.UIOKButton">
<ParameterName />
<ModifierKeys>None</ModifierKeys>
<IsGlobalHotkey>false</IsGlobalHotkey>
<Location X="22" Y="19" />
<WheelDirection>0</WheelDirection>
<ActionType>Click</ActionType>
<MouseButton>Left</MouseButton>
</MouseAction>
<SetValueAction UIObjectName="UIMap1.UI 系統登錄Window.UITbx_uidWindow.UITbx_uidEdit">
<ParameterName />
<Value Encoded="false">Admin</Value>
<Type>String</Type>
</SetValueAction>
<SetValueAction UIObjectName="UIMap1.UI 系統登錄Window.UITbx_pwdWindow.UITbx_pwdEdit">
<ParameterName />
<Value Encoded="false">123456</Value>
<Type>String</Type>
</SetValueAction>
<MouseAction UIObjectName="UIMap1.UI 系統登錄Window.UI登錄Window.UI登錄Button">
<ParameterName />
<ModifierKeys>None</ModifierKeys>
<IsGlobalHotkey>false</IsGlobalHotkey>
<Location X="39" Y="8" />
<WheelDirection>0</WheelDirection>
<ActionType>Click</ActionType>
<MouseButton>Left</MouseButton>
</MouseAction>
<TestStepMarkerAction MarkerInformation="InputRightUidPwd">
<ParameterName />
<StepId>-1</StepId>
<Direction>Start</Direction>
<Outcome />
<Disabled>false</Disabled>
<WorkItemId>0</WorkItemId>
<MarkerRegionType>Action</MarkerRegionType>
</TestStepMarkerAction>
<AssertAction UIObjectName="UIMap.UI 提示Window.UI用戶名或密碼錯誤Window.UI登陸成功Text">
<ParameterName />
<PropertyName>Exists</PropertyName>
<ExpectedValue>True</ExpectedValue>
<Type>Boolean</Type>
<PropertyCondition>AreEqual</PropertyCondition>
</AssertAction>
<TestStepMarkerAction MarkerInformation="AssertRightWinow">
<ParameterName />
<StepId>-1</StepId>
<Direction>Start</Direction>
<Outcome />
<Disabled>false</Disabled>
<WorkItemId>0</WorkItemId>
<MarkerRegionType>Assertion</MarkerRegionType>
</TestStepMarkerAction>
<MouseAction UIObjectName="UIMap1.UI 提示Window.UIOKWindow.UIOKButton">
<ParameterName />
<ModifierKeys>None</ModifierKeys>
<IsGlobalHotkey>false</IsGlobalHotkey>
<Location X="28" Y="13" />
<WheelDirection>0</WheelDirection>
<ActionType>Click</ActionType>
<MouseButton>Left</MouseButton>
</MouseAction>
<MouseAction UIObjectName="UIMap1.UI 系統登錄Window.UI系統登錄TitleBar.UICloseButton">
<ParameterName />
<ModifierKeys>None</ModifierKeys>
<IsGlobalHotkey>false</IsGlobalHotkey>
<Location X="9" Y="11" />
<WheelDirection>0</WheelDirection>
<ActionType>Click</ActionType>
<MouseButton>Left</MouseButton>
</MouseAction>
<TestStepMarkerAction MarkerInformation="CloseWindow">
<ParameterName />
<StepId>-1</StepId>
<Direction>Start</Direction>
<Outcome />
<Disabled>false</Disabled>
<WorkItemId>0</WorkItemId>
<MarkerRegionType>Action</MarkerRegionType>
</TestStepMarkerAction>
</ExecuteActions>
<CleanupActions />
<OnErrorActions />
<Maps>
<UIMap Id="UIMap1">
<TopLevelWindows>
<TopLevelWindow ControlType="Window" Id="UI 系統登錄Window" FriendlyName="系統登錄" SpecialControlType="None" SessionId="154362">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="Name"& gt;系統登錄</PropertyCondition>
<PropertyCondition Name="ClassName" Operator="Contains">WindowsForms10.Window</PropertyCondition>
<PropertyCondition Name="ControlType">Window</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants>
<UIObject ControlType="Window" Id="UITbx_uidWindow" FriendlyName="Tbx_uid" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="ControlName">Tbx_uid</PropertyCondition>
<PropertyCondition Name="ControlType">Window</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants>
<UIObject ControlType="Edit" Id="UITbx_uidEdit" FriendlyName="Tbx_uid" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="Name"& gt;密碼 :</PropertyCondition>
<PropertyCondition Name="ControlType">Edit</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants />
</UIObject>
</Descendants>
</UIObject>
<UIObject ControlType="Window" Id="UITbx_pwdWindow" FriendlyName="Tbx_pwd" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="ControlName">Tbx_pwd</PropertyCondition>
<PropertyCondition Name="ControlType">Window</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants>
<UIObject ControlType="Edit" Id="UITbx_pwdEdit" FriendlyName="Tbx_pwd" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="ControlType">Edit</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants />
</UIObject>
</Descendants>
</UIObject>
<UIObject ControlType="Window" Id="UI 登錄Window" FriendlyName="登錄" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="ControlName">Btn_Login</PropertyCondition>
<PropertyCondition Name="ControlType">Window</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants>
<UIObject ControlType="Button" Id="UI 登錄Button" FriendlyName="登錄" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="Name"& gt;登錄</PropertyCondition>
<PropertyCondition Name="ControlType">Button</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants />
</UIObject>
</Descendants>
</UIObject>
<UIObject ControlType="TitleBar" Id="UI 系統登錄TitleBar" FriendlyName="系統登錄" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="ControlType">TitleBar</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants>
<UIObject ControlType="Button" Id="UICloseButton" FriendlyName="Close" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 系統登錄</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="Name">Close</PropertyCondition>
<PropertyCondition Name="ControlType">Button</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants />
</UIObject>
</Descendants>
</UIObject>
</Descendants>
</TopLevelWindow>
<TopLevelWindow ControlType="Window" Id="UI 提示Window" FriendlyName="提示" SpecialControlType="None" SessionId="1203022">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 提示</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="Name"& gt;提示</PropertyCondition>
<PropertyCondition Name="ClassName">#32770</PropertyCondition>
<PropertyCondition Name="ControlType">Window</PropertyCondition>
</AndCondition>
<SupportLevel>1</SupportLevel>
<Descendants>
<UIObject ControlType="Window" Id="UI 用戶名或密碼錯誤Window" FriendlyName="用戶名或密碼錯誤!" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 提示</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="ControlId">65535</PropertyCondition>
<PropertyCondition Name="ControlType">Window</PropertyCondition>
</AndCondition>
<SupportLevel>1</SupportLevel>
<Descendants>
<UIObject ControlType="Text" Id="UI 用戶名或密碼錯誤Text" FriendlyName="用戶名或密碼錯誤!" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 提示</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="Name"& gt;用戶名或密碼錯誤!</PropertyCondition>
<PropertyCondition Name="ControlType">Text</PropertyCondition>
</AndCondition>
<SupportLevel>1</SupportLevel>
<Descendants />
</UIObject>
<UIObject ControlType="Text" Id="UI 登陸成功Text" FriendlyName="登陸成功!" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 提示</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="Name"& gt;登陸成功!</PropertyCondition>
<PropertyCondition Name="ControlType">Text</PropertyCondition>
</AndCondition>
<SupportLevel>1</SupportLevel>
<Descendants />
</UIObject>
</Descendants>
</UIObject>
<UIObject ControlType="Window" Id="UIOKWindow" FriendlyName="OK" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 提示</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="ControlId">2</PropertyCondition>
<PropertyCondition Name="ControlType">Window</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants>
<UIObject ControlType="Button" Id="UIOKButton" FriendlyName="OK" SpecialControlType="None">
<TechnologyName>MSAA</TechnologyName>
<WindowTitles>
<WindowTitle> 提示</WindowTitle>
</WindowTitles>
<SearchConfigurations>
<SearchConfiguration>VisibleOnly</SearchConfiguration>
</SearchConfigurations>
<AndCondition Id="SearchCondition">
<PropertyCondition Name="Name">OK</PropertyCondition>
<PropertyCondition Name="ControlType">Button</PropertyCondition>
</AndCondition>
<SupportLevel>0</SupportLevel>
<Descendants />
</UIObject>
</Descendants>
</UIObject>
</Descendants>
</TopLevelWindow>
</TopLevelWindows>
</UIMap>
</Maps>
<ValueMap>
<ParameterList />
</ValueMap>
</UITest>

  其實UIMap1.uitest這個XML的文件結構如下:

 
<UITest>
  <Configuration></Configuration>
  <InitializeActions></InitializeActions>
  <ExecuteActions></ExecuteActions>
  <CleanupActions></CleanupActions>
  <OnErrorActions></OnErrorActions>
  <Maps></Maps>
  <ValueMap></ValueMap>
</UITest>

  這里做一個簡單的說明:

  Configuration:是對環境進行一個描述和配置,對測試幾乎沒有影響,可以忽略。

  InitializeActionsExecuteActionsCleanupActionsOnErrorAction:其中InitializeActions指初始化需要執行的操作,ExecuteActions指測試過程中的操作(目前我們所通過錄制所生成的操作都默認放在ExecuteActions,大家現在可以回過去仔細看看ExecuteActions節點的內容),CleanupActions指測試完畢需要清理資源的Actions,而OnErrorAction則指代異常處理Actions。

  Maps:是我們需要關注的對象庫,我們操作過程中所識別的所有控件都是會存放到這里的,對象識別我會在第三章的時候提及。

  ValueMap:是值映射,類似于參數記載,實際功能也不是特別大。

  在這些節點中,真正起到實際作用的是ActionsMaps。

  之后我們再來查看UIMap1.Designer.cs,同樣,覺得會看暈的可直接跳過,之后回來再看。

   UIMap1.Designer.cs

View Code
 
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by coded UI test builder.
// Version: 10.0.0.0
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace TestProject1.UIMap1Classes
{

using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Input;
using Microsoft.VisualStudio.TestTools.UITest.Extension;
using Microsoft.VisualStudio.TestTools.UITesting;
using Microsoft.VisualStudio.TestTools.UITesting.WinControls;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;
using Mouse = Microsoft.VisualStudio.TestTools.UITesting.Mouse;
using MouseButtons = System.Windows.Forms.MouseButtons;


[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public partial class UIMap1
{


/// <summary>
/// InputErrorUidPwd - Use 'InputErrorUidPwdParams' to pass parameters into this method.
/// </summary>
public void InputErrorUidPwd()
{

#region Variable Declarations
WinEdit uITbx_uidEdit = this.UI 系統登錄Window.UITbx_uidWindow.UITbx_uidEdit;
WinEdit uITbx_pwdEdit
= this.UI 系統登錄Window.UITbx_pwdWindow.UITbx_pwdEdit;
WinButton uI 登錄Button
= this.UI系統登錄Window.UI登錄Window.UI登錄Button;
#endregion

// Type 'errorUid' in 'Tbx_uid' text box
uITbx_uidEdit.Text = this.InputErrorUidPwdParams.UITbx_uidEditText;

// Type 'errorPwd' in 'Tbx_pwd' text box
uITbx_pwdEdit.Text = this.InputErrorUidPwdParams.UITbx_pwdEditText;

// Click ' 登錄' button
Mouse.Click(uI登錄Button, new Point(25, 6));
}


/// <summary>
/// AssertErrorWinow - Use 'AssertErrorWinowExpectedValues' to pass parameters into this method.
/// </summary>
public void AssertErrorWinow()
{

#region Variable Declarations
WinText uI 用戶名或密碼錯誤Text = this.UI提示Window.UI用戶名或密碼錯誤Window.UI用戶名或密碼錯誤Text;
#endregion

// Verify that ' 用戶名或密碼錯誤!' label's property 'Exists' equals 'True'
Assert.AreEqual(this.AssertErrorWinowExpectedValues.UI 用戶名或密碼錯誤TextExists, uI用戶名或密碼錯誤Text.Exists);
}


/// <summary>
/// InputRightUidPwd - Use 'InputRightUidPwdParams' to pass parameters into this method.
/// </summary>
public void InputRightUidPwd()
{

#region Variable Declarations
WinButton uIOKButton = this.UI 提示Window.UIOKWindow.UIOKButton;
WinEdit uITbx_uidEdit
= this.UI 系統登錄Window.UITbx_uidWindow.UITbx_uidEdit;
WinEdit uITbx_pwdEdit
= this.UI 系統登錄Window.UITbx_pwdWindow.UITbx_pwdEdit;
WinButton uI 登錄Button
= this.UI系統登錄Window.UI登錄Window.UI登錄Button;
#endregion

// Click 'OK' button
Mouse.Click(uIOKButton, new Point(22, 19));

// Type 'Admin' in 'Tbx_uid' text box
uITbx_uidEdit.Text = this.InputRightUidPwdParams.UITbx_uidEditText;

// Type '123456' in 'Tbx_pwd' text box
uITbx_pwdEdit.Text = this.InputRightUidPwdParams.UITbx_pwdEditText;

// Click ' 登錄' button
Mouse.Click(uI登錄Button, new Point(39, 8));
}


/// <summary>
/// AssertRightWinow - Use 'AssertRightWinowExpectedValues' to pass parameters into this method.
/// </summary>
public void AssertRightWinow()
{

#region Variable Declarations
WinText uI 登陸成功Text = this.UI提示Window.UI用戶名或密碼錯誤Window.UI登陸成功Text;
#endregion

// Verify that ' 登陸成功!' label's property 'Exists' equals 'True'
Assert.AreEqual(this.AssertRightWinowExpectedValues.UI 登陸成功TextExists, uI登陸成功Text.Exists);
}


/// <summary>
/// CloseWindow
/// </summary>
public void CloseWindow()
{

#region Variable Declarations
WinButton uIOKButton = this.UI 提示Window.UIOKWindow.UIOKButton;
WinButton uICloseButton
= this.UI 系統登錄Window.UI系統登錄TitleBar.UICloseButton;
#endregion

// Click 'OK' button
Mouse.Click(uIOKButton, new Point(28, 13));

// Click 'Close' button
Mouse.Click(uICloseButton, new Point(9, 11));
}


#region Properties
public virtual InputErrorUidPwdParams InputErrorUidPwdParams
{

get
{
if ((this.mInputErrorUidPwdParams == null))
{

this.mInputErrorUidPwdParams = new InputErrorUidPwdParams();
}

return this.mInputErrorUidPwdParams;
}
}


public virtual AssertErrorWinowExpectedValues AssertErrorWinowExpectedValues
{

get
{
if ((this.mAssertErrorWinowExpectedValues == null))
{

this.mAssertErrorWinowExpectedValues = new AssertErrorWinowExpectedValues();
}

return this.mAssertErrorWinowExpectedValues;
}
}


public virtual InputRightUidPwdParams InputRightUidPwdParams
{

get
{
if ((this.mInputRightUidPwdParams == null))
{

this.mInputRightUidPwdParams = new InputRightUidPwdParams();
}

return this.mInputRightUidPwdParams;
}
}


public virtual AssertRightWinowExpectedValues AssertRightWinowExpectedValues
{

get
{
if ((this.mAssertRightWinowExpectedValues == null))
{

this.mAssertRightWinowExpectedValues = new AssertRightWinowExpectedValues();
}

return this.mAssertRightWinowExpectedValues;
}
}


public UI 系統登錄Window UI系統登錄Window
{

get
{
if ((this.mUI 系統登錄Window == null))
{

this.mUI 系統登錄Window = new UI系統登錄Window();
}

return this.mUI 系統登錄Window;
}
}


public UI 提示Window UI提示Window
{

get
{
if ((this.mUI 提示Window == null))
{

this.mUI 提示Window = new UI提示Window();
}

return this.mUI 提示Window;
}
}

#endregion

#region Fields
private InputErrorUidPwdParams mInputErrorUidPwdParams;

private AssertErrorWinowExpectedValues mAssertErrorWinowExpectedValues;

private InputRightUidPwdParams mInputRightUidPwdParams;

private AssertRightWinowExpectedValues mAssertRightWinowExpectedValues;

private UI 系統登錄Window mUI系統登錄Window;

private UI提示 Window mUI提示Window;
#endregion
}

/// <summary>
/// Parameters to be passed into 'InputErrorUidPwd'
/// </summary>
[GeneratedCode("Coded UITest Builder", "10.0.30319.1")]
public class InputErrorUidPwdParams
{


#region Fields
/// <summary>
/// Type 'errorUid' in 'Tbx_uid' text box
/// </summary>
public string UITbx_uidEditText = "errorUid";

/// <summary>
/// Type 'errorPwd' in 'Tbx_pwd' text box
/// </summary>
public string UITbx_pwdEditText = "errorPwd";
#endregion
}

/// <summary>
/// Parameters to be passed into 'AssertErrorWinow'
/// </summary>
[GeneratedCode("Coded UITest Builder", "10.0.30319.1")]
public class AssertErrorWinowExpectedValues
{


#region Fields
/// <summary>
/// Verify that ' 用戶名或密碼錯誤!' label's property 'Exists' equals 'True'
/// </summary>
public bool UI 用戶名或密碼錯誤TextExists = true;
#endregion
}

/// <summary>
/// Parameters to be passed into 'InputRightUidPwd'
/// </summary>
[GeneratedCode("Coded UITest Builder", "10.0.30319.1")]
public class InputRightUidPwdParams
{


#region Fields
/// <summary>
/// Type 'Admin' in 'Tbx_uid' text box
/// </summary>
public string UITbx_uidEditText = "Admin";

/// <summary>
/// Type '123456' in 'Tbx_pwd' text box
/// </summary>
public string UITbx_pwdEditText = "123456";
#endregion
}

/// <summary>
/// Parameters to be passed into 'AssertRightWinow'
/// </summary>
[GeneratedCode("Coded UITest Builder", "10.0.30319.1")]
public class AssertRightWinowExpectedValues
{


#region Fields
/// <summary>
/// Verify that ' 登陸成功!' label's property 'Exists' equals 'True'
/// </summary>
public bool UI 登陸成功TextExists = true;
#endregion
}

[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public class UI 系統登錄Window : WinWindow
{


public UI 系統登錄Window()
{

#region Search Criteria
this.SearchProperties[WinWindow.PropertyNames.Name] = " 系統登錄";
this.SearchProperties.Add(new PropertyExpression(WinWindow.PropertyNames.ClassName, "WindowsForms10.Window", PropertyExpressionOperator.Contains));
this.WindowTitles.Add(" 系統登錄");
#endregion
}

#region Properties
public UITbx_uidWindow UITbx_uidWindow
{

get
{
if ((this.mUITbx_uidWindow == null))
{

this.mUITbx_uidWindow = new UITbx_uidWindow(this);
}

return this.mUITbx_uidWindow;
}
}


public UITbx_pwdWindow UITbx_pwdWindow
{

get
{
if ((this.mUITbx_pwdWindow == null))
{

this.mUITbx_pwdWindow = new UITbx_pwdWindow(this);
}

return this.mUITbx_pwdWindow;
}
}


public UI 登錄Window UI登錄Window
{

get
{
if ((this.mUI 登錄Window == null))
{

this.mUI 登錄Window = new UI登錄Window(this);
}

return this.mUI 登錄Window;
}
}


public UI 系統登錄TitleBar UI系統登錄TitleBar
{

get
{
if ((this.mUI 系統登錄TitleBar == null))
{

this.mUI 系統登錄TitleBar = new UI系統登錄TitleBar(this);
}

return this.mUI 系統登錄TitleBar;
}
}

#endregion

#region Fields
private UITbx_uidWindow mUITbx_uidWindow;

private UITbx_pwdWindow mUITbx_pwdWindow;

private UI 登錄Window mUI登錄Window;

private UI系統登錄 TitleBar mUI系統登錄TitleBar;
#endregion
}

[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public class UITbx_uidWindow : WinWindow
{


public UITbx_uidWindow(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{

#region Search Criteria
this.SearchProperties[WinWindow.PropertyNames.ControlName] = "Tbx_uid";
this.WindowTitles.Add(" 系統登錄");
#endregion
}

#region Properties
public WinEdit UITbx_uidEdit
{

get
{
if ((this.mUITbx_uidEdit == null))
{

this.mUITbx_uidEdit = new WinEdit(this);
#region Search Criteria
this.mUITbx_uidEdit.SearchProperties[WinEdit.PropertyNames.Name] = " 密碼 :";
this.mUITbx_uidEdit.WindowTitles.Add(" 系統登錄");
#endregion
}
return this.mUITbx_uidEdit;
}
}

#endregion

#region Fields
private WinEdit mUITbx_uidEdit;
#endregion
}

[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public class UITbx_pwdWindow : WinWindow
{


public UITbx_pwdWindow(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{

#region Search Criteria
this.SearchProperties[WinWindow.PropertyNames.ControlName] = "Tbx_pwd";
this.WindowTitles.Add(" 系統登錄");
#endregion
}

#region Properties
public WinEdit UITbx_pwdEdit
{

get
{
if ((this.mUITbx_pwdEdit == null))
{

this.mUITbx_pwdEdit = new WinEdit(this);
#region Search Criteria
this.mUITbx_pwdEdit.WindowTitles.Add(" 系統登錄");
#endregion
}
return this.mUITbx_pwdEdit;
}
}

#endregion

#region Fields
private WinEdit mUITbx_pwdEdit;
#endregion
}

[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public class UI 登錄Window : WinWindow
{


public UI 登錄Window(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{

#region Search Criteria
this.SearchProperties[WinWindow.PropertyNames.ControlName] = "Btn_Login";
this.WindowTitles.Add(" 系統登錄");
#endregion
}

#region Properties
public WinButton UI 登錄Button
{

get
{
if ((this.mUI 登錄Button == null))
{

this.mUI 登錄Button = new WinButton(this);
#region Search Criteria
this.mUI 登錄Button.SearchProperties[WinButton.PropertyNames.Name] = "登錄";
this.mUI 登錄Button.WindowTitles.Add("系統登錄");
#endregion
}
return this.mUI 登錄Button;
}
}

#endregion

#region Fields
private WinButton mUI 登錄Button;
#endregion
}

[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public class UI 系統登錄TitleBar : WinTitleBar
{


public UI 系統登錄TitleBar(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{

#region Search Criteria
this.WindowTitles.Add(" 系統登錄");
#endregion
}

#region Properties
public WinButton UICloseButton
{

get
{
if ((this.mUICloseButton == null))
{

this.mUICloseButton = new WinButton(this);
#region Search Criteria
this.mUICloseButton.SearchProperties[WinButton.PropertyNames.Name] = "Close";
this.mUICloseButton.WindowTitles.Add(" 系統登錄");
#endregion
}
return this.mUICloseButton;
}
}

#endregion

#region Fields
private WinButton mUICloseButton;
#endregion
}

[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public class UI 提示Window : WinWindow
{


public UI 提示Window()
{

#region Search Criteria
this.SearchProperties[WinWindow.PropertyNames.Name] = " 提示";
this.SearchProperties[WinWindow.PropertyNames.ClassName] = "#32770";
this.WindowTitles.Add(" 提示");
#endregion
}

#region Properties
public UI 用戶名或密碼錯誤Window UI用戶名或密碼錯誤Window
{

get
{
if ((this.mUI 用戶名或密碼錯誤Window == null))
{

this.mUI 用戶名或密碼錯誤Window = new UI用戶名或密碼錯誤Window(this);
}

return this.mUI 用戶名或密碼錯誤Window;
}
}


public UIOKWindow UIOKWindow
{

get
{
if ((this.mUIOKWindow == null))
{

this.mUIOKWindow = new UIOKWindow(this);
}

return this.mUIOKWindow;
}
}

#endregion

#region Fields
private UI 用戶名或密碼錯誤Window mUI用戶名或密碼錯誤Window;

private UIOKWindow mUIOKWindow;
#endregion
}

[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public class UI 用戶名或密碼錯誤Window : WinWindow
{


public UI 用戶名或密碼錯誤Window(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{

#region Search Criteria
this.SearchProperties[WinWindow.PropertyNames.ControlId] = "65535";
this.WindowTitles.Add(" 提示");
#endregion
}

#region Properties
public WinText UI 用戶名或密碼錯誤Text
{

get
{
if ((this.mUI 用戶名或密碼錯誤Text == null))
{

this.mUI 用戶名或密碼錯誤Text = new WinText(this);
#region Search Criteria
this.mUI 用戶名或密碼錯誤Text.SearchProperties[WinText.PropertyNames.Name] = "用戶名或密碼錯誤!";
this.mUI 用戶名或密碼錯誤Text.WindowTitles.Add("提示");
#endregion
}
return this.mUI 用戶名或密碼錯誤Text;
}
}


public WinText UI 登陸成功Text
{

get
{
if ((this.mUI 登陸成功Text == null))
{

this.mUI 登陸成功Text = new WinText(this);
#region Search Criteria
this.mUI 登陸成功Text.SearchProperties[WinText.PropertyNames.Name] = "登陸成功!";
this.mUI 登陸成功Text.WindowTitles.Add("提示");
#endregion
}
return this.mUI 登陸成功Text;
}
}

#endregion

#region Fields
private WinText mUI 用戶名或密碼錯誤Text;

private WinText mUI登陸成功 Text;
#endregion
}

[GeneratedCode(
"Coded UITest Builder", "10.0.30319.1")]
public class UIOKWindow : WinWindow
{


public UIOKWindow(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{

#region Search Criteria
this.SearchProperties[WinWindow.PropertyNames.ControlId] = "2";
this.WindowTitles.Add(" 提示");
#endregion
}

#region Properties
public WinButton UIOKButton
{

get
{
if ((this.mUIOKButton == null))
{

this.mUIOKButton = new WinButton(this);
#region Search Criteria
this.mUIOKButton.SearchProperties[WinButton.PropertyNames.Name] = "OK";
this.mUIOKButton.WindowTitles.Add(" 提示");
#endregion
}
return this.mUIOKButton;
}
}

#endregion

#region Fields
private WinButton mUIOKButton;
#endregion
}
}

  UIMap1.Designer.cs這個文件結構如下:

6UIMap1.Designer.cs

   我們可以用UIMap1.uitest上的內容和UIMap1.Designer.cs上的內容做個對比,可以明顯的發現他們之間有一定的對應性,那么疑問就產生了,我們在錄制的時候,究竟先生成UIMap1.uitest還是UIMap1.Designer.cs?在對界面操作的代碼中,他們哪個起作用?

  為了說明這個,就得提到編碼的UI測試操作步驟的錄制原理,這里會按步驟說明:

  (1)首先我們打開了錄制生成器。

  (2)使用錄制生成器錄制操作,對于每一個操作動作,錄制生成器會根據你所進行的操作,解析被操作的對象(控件),并分析操作動作,并將對象(控件)的關鍵標識屬性和操作動作按錄制順序存放在內存中。

  (3)停止錄制。

  (4)點擊“生成代碼”按鈕,錄制生成器會讀取之前放在內存中的對象(控件)的關鍵標識屬性和操作動作按XML的形式存放在UIMap1.uitest里。

  (5)之后代碼生成器通過解析UIMap1.uitest,再生成UIMap1.Designer.cs。

  然后進行回放的時候,真正在起作用其實的是UIMap1.Designer.csUIMap1.uitest的作用僅僅是用于生成UIMap1.Designer.cs。

  我想介紹到這里很多曾經使用過VS2010編碼UI測試的朋友應該明白了,為什么自己在UIMap1.Designer.cs添加或者刪除的代碼,在打開錄制生成器之后,重新點擊“生成代碼”,之前的修改就消失了,原因就是因為UIMap1.Designer.cs里面的代碼是根據UIMap1.uitest生成的。

  因此,如果要想編寫自定義代碼,可以通過兩種途徑。

  (1)通過修改UIMap1.uitest來控制UIMap1.Designer.cs代碼的生成。

  (2)將代碼寫到非UIMap1.Designer.cs文件的其他地方。 

  在本章的第二部分,將介紹如何通過修改UIMap1.uitest來控制UIMap1.Designer.cs代碼的生成,預計可能在本周六或者周日發布,敬請關注~

  PS:如何調用UIMap1.Designer.cs中的方法,這個時候可以新建一個CodedUItest.cs,取消錄制,寫一個這樣的調用即可。

 
[TestMethod]
public void CodedUITestMethod1()
{
UIMap1Classes.UIMap1 uimap1
= new UIMap1Classes.UIMap1();
uimap1.InputErrorUidPwd();
uimap1.AssertErrorWinow();
uimap1.InputRightUidPwd();
uimap1.AssertRightWinow();
uimap1.CloseWindow();
}
0
0
 
標簽:VS2010 測試
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()