编码 UI 测试记录新测试覆盖 UIMap.Designer.cs 更改
Coded UI Test recording new test overwrites UIMap.Designer.cs changes
我正在录制成功登录场景的编码 UI 测试。拉起后'Coded UI Test builder',记录下步骤
- 启动 exe
- 点击表单会在页面上触发一些动画
5-6 秒后,我可以选择 'Register' 或 'Login'
- 我点击了 'Login'(uILoginButton) 按钮并成功登录。
当我尝试回放此测试时,它在第 3 步崩溃,提示“找不到名为 'btnLogin'
的 UI 元素
所以我导航到 UIMap.Designer.cs 文件并在单击按钮之前添加了下面的代码行。
uILoginButton.WaitForControlExist();
我在 'UIMap.Designer.cs' 中记录的方法看起来像这样
/// <summary>
/// DoLogin
/// </summary>
public void DoLogin()
{
#region Variable Declarations
WpfButton uILoginButton= this.UIMPortPodGUIWindow.UIItemCustom7.UIContinueButton;
#endregion
uILoginButton.WaitForControlExist(100);
// Click 'Continue' button
Mouse.Click(uILoginButton, new Point(191, 42));
}
之后我回放了这个测试,很高兴看到一切正常。
然后我开始录制第二个测试,完成录制后我意识到录制已经覆盖了我之前对 UIMap.Designer.cs
的更改,即下面的行丢失了
uILoginButton.WaitForControlExist();
我知道它应该放在 'UIMap.cs' 里面,但不知道如何在两个 类.
中部分声明 DoLogin() 方法
添加自定义代码的最佳位置是哪里?
永远不要将代码放在 .Designer.cs
中,除非您不关心它会随机丢失。
在这种情况下,我通常会从自动生成的 DoLogin 中复制代码,并在具有自定义步骤的 UIMap.cs
(而不是 UIMap.Designer.cs
)中创建我自己的方法。
public partial class UIMap
{
public void DoLoginWithWait()
{
#region Variable Declarations
WpfButton uILoginButton = this.UIMPortPodGUIWindow.UIItemCustom7.UIContinueButton;
#endregion
uILoginButton.WaitForControlExist(100);
// Click 'Continue' button
Mouse.Click(uILoginButton, new Point(191, 42));
}
}
程序生成的空白 UIMap.cs
是针对您所处的确切情况。UIMap.cs
在记录新步骤期间不会被覆盖,因此您可以安全地将代码放在那里。
编辑
在进一步探索之后,我发现有一个按钮可以使这更容易。从 UIMap.uitest
编辑器中单击 按钮(或 Ctrl+Alt+C)这将从设计器中取出方法并将其放入 UIMap.cs
文件中,然后您可以编辑安全的方法,不用担心重建的设计器文件会覆盖您的更改。
我正在录制成功登录场景的编码 UI 测试。拉起后'Coded UI Test builder',记录下步骤
- 启动 exe
- 点击表单会在页面上触发一些动画 5-6 秒后,我可以选择 'Register' 或 'Login'
- 我点击了 'Login'(uILoginButton) 按钮并成功登录。
当我尝试回放此测试时,它在第 3 步崩溃,提示“找不到名为 'btnLogin'
的 UI 元素所以我导航到 UIMap.Designer.cs 文件并在单击按钮之前添加了下面的代码行。
uILoginButton.WaitForControlExist();
我在 'UIMap.Designer.cs' 中记录的方法看起来像这样
/// <summary>
/// DoLogin
/// </summary>
public void DoLogin()
{
#region Variable Declarations
WpfButton uILoginButton= this.UIMPortPodGUIWindow.UIItemCustom7.UIContinueButton;
#endregion
uILoginButton.WaitForControlExist(100);
// Click 'Continue' button
Mouse.Click(uILoginButton, new Point(191, 42));
}
之后我回放了这个测试,很高兴看到一切正常。
然后我开始录制第二个测试,完成录制后我意识到录制已经覆盖了我之前对 UIMap.Designer.cs
的更改,即下面的行丢失了
uILoginButton.WaitForControlExist();
我知道它应该放在 'UIMap.cs' 里面,但不知道如何在两个 类.
中部分声明 DoLogin() 方法添加自定义代码的最佳位置是哪里?
永远不要将代码放在 .Designer.cs
中,除非您不关心它会随机丢失。
在这种情况下,我通常会从自动生成的 DoLogin 中复制代码,并在具有自定义步骤的 UIMap.cs
(而不是 UIMap.Designer.cs
)中创建我自己的方法。
public partial class UIMap
{
public void DoLoginWithWait()
{
#region Variable Declarations
WpfButton uILoginButton = this.UIMPortPodGUIWindow.UIItemCustom7.UIContinueButton;
#endregion
uILoginButton.WaitForControlExist(100);
// Click 'Continue' button
Mouse.Click(uILoginButton, new Point(191, 42));
}
}
程序生成的空白 UIMap.cs
是针对您所处的确切情况。UIMap.cs
在记录新步骤期间不会被覆盖,因此您可以安全地将代码放在那里。
编辑
在进一步探索之后,我发现有一个按钮可以使这更容易。从 UIMap.uitest
编辑器中单击 UIMap.cs
文件中,然后您可以编辑安全的方法,不用担心重建的设计器文件会覆盖您的更改。