编码的UI测试记录新的测试覆盖UIMap.Designer.cs的变化

use*_*747 1 .net c# automated-tests

我正在为成功的登录方案录制Coded UI测试.在提取"Coded UI Test builder"之后,我记录了以下步骤.

  1. 启动exe
  2. 点击表格,在页面上触发一些动画,5-6秒后,我可以选择"注册"或"登录"
  3. 我点击了"登录"(uILoginButton)按钮并成功登录.

当我尝试回放这个测试时,它在第3步崩溃时说,'找不到名为'btnLogin'的UI元素

所以我导航到UIMap.Designer.cs文件并在按钮点击之前添加到下面的代码行.

uILoginButton.WaitForControlExist();
Run Code Online (Sandbox Code Playgroud)

我在'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));
}
Run Code Online (Sandbox Code Playgroud)

在此之后我回放了这个测试,我很高兴看到一切正常.然后我开始录制第二个测试,在完成录制后,我意识到录制已经覆盖了我之前的更改,UIMap.Designer.cs即在线下方丢失了

uILoginButton.WaitForControlExist();
Run Code Online (Sandbox Code Playgroud)

我知道它应该进入'UIMap.cs',但不知道如何在两个类中部分声明DoLogin()方法.

哪个是添加自定义代码的最佳位置?

Sco*_*ain 5

.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));
    }
}
Run Code Online (Sandbox Code Playgroud)

UIMap.cs程序清空是针对您所处的确切情况.UIMap.cs在记录新步骤期间不会覆盖,因此您可以安全地将代码放在那里.


编辑

在进一步探索之后,我发现有一个按钮可以让这更容易.从UIMap.uitest编辑器中单击在此输入图像描述按钮(或Ctrl + Alt + C)这将从设计器中取出方法并将其放入UIMap.cs文件中,然后您可以安全地编辑方法,而无需担心重建的设计器文件会覆盖您的更改.