【问题标题】:Coded UI Test recording new test overwrites UIMap.Designer.cs changes记录新测试的编码 UI 测试覆盖 UIMap.Designer.cs 更改
【发布时间】:2015-02-17 00:52:36
【问题描述】:

我正在记录成功登录场景的编码 UI 测试。调出“Coded UI Test builder”后,我记录了以下步骤。

  1. 启动 exe
  2. 点击表单会触发页面上的一些动画 5-6 秒后,我可以选择“注册”或“登录”
  3. 我点击了“登录”(uILloginButton) 按钮并成功登录。

当我尝试回放此测试时,它在第 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() 方法。

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

【问题讨论】:

    标签: c# .net automated-tests


    【解决方案1】:

    切勿将代码放入.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 文件中,然后您可以安全地编辑方法而无需担心重建设计器文件覆盖您的更改。

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 2014-07-12
      • 2015-07-08
      • 2017-04-09
      • 1970-01-01
      相关资源
      最近更新 更多