相同的手动测试通过时,C#MSTEST编码的UI自动测试失败

时间:2016-08-03 16:27:23

标签: c# unit-testing mstest coded-ui-tests

我用谷歌搜索和Binged和Yahoo'd甚至是Dogpiled。我发现大多数Python,PHP和Ruby都不适用。只显示一个项目(从2012年开始)但没有答案:unit test fails in r# but passes in mstest

我有两个测试完全按照记录完成。例如,当测试进入“提交”按钮时,应用程序表示页面尚未准备好提交,“提交”按钮仍然处于禁用状态。另一方面,“提交”按钮已启用,但页面不执行任何操作。当我使用相同的数据(或使用不同的数据)手动(使用键盘和鼠标)运行完全相同的操作时,两个页面上的“提交”按钮都会起作用,并且两个页面都会处理。

我已经将测试运行到点击提交按钮的位置,但是当我手动点击它们时也没有任何反应。我从一个字段到另一个字段的标签,认为它可能是一个没有触发的事件,但没有。

以下是我发现的内容:如果自动打开页面,则提交按钮将不起作用。如果自动输入或选择了页面上的一个项目,则提交按钮将不起作用。但是:如果我在页面打开之前运行自动化到点,那么如果我单击打开页面并手动键盘和鼠标输入,然后手动鼠标单击“提交”按钮,它将起作用。

测试记录在MTM中并导入Visual Studio 2012.我尝试重新导入它们,并且我使用Visual Studio手动记录了这些步骤。

我们现在认为测试软件(MSTest)与页面中的JavaScript之间存在一些意想不到的交互。我们在应用程序中编写了11个其他页面(Coded UI)。所有11个应用程序页面使用相同的基本体系结构和相同的控件。我们测试人员认为JavaScript可能会被破坏(缺少右括号,缺少一对括号,缺少分号,在错误的位置换行,等等)。

这些测试绝对没有什么独特之处。它们是我编写过的最简单的测试之一。其中一个只有四个输入字段。我没有手动编码; UIMap.cs文件为空。它基于UIMap.UITest文件在UIMap.Designer.cs中。

以下是我的Coded UI测试类的重要部分(省略了变量设置和try-catch逻辑):

try
{
  User.OpenBrowser(TestContext);
  this.UIMap.ClickFeesButtonInSecondaryMenu();
  this.UIMap.ClickAddPaymentButton();
  this.UIMap.OpenYearDropdownAndSelect2016();
  this.UIMap.Type1234InCheckNumber();
  this.UIMap.Type275InTotalAmount();
  this.UIMap.SelectBusinessFees();
  this.UIMap.SelectInstructorFees();
  this.UIMap.ClickSubmitButton();
  User.CloseBrowser(TestContext);
}
catch . . . . 

这是我的UIMap.Designer.cs的一部分:

public void ClickFeesButtonInSecondaryMenu()
{
    #region Variable Declarations
    HtmlHyperlink uIFeesHyperlink = this.UIInternetExplorerWindow.UIDocument.UIFeesHyperlink;
    #endregion

    // Click 'Fees' link
    Mouse.Click(uIFeesHyperlink, new Point(22, 21));
}

public void ClickAddPaymentButton()
{
    #region Variable Declarations
    HtmlHyperlink uIAddPaymentHyperlink = this.UIInternetExplorerWindow.UIDocument1.UIAddPaperPaymentHyperlink;
    #endregion

    // Click 'Add Payment' link
    Mouse.Click(uIAddPaymentHyperlink, new Point(84, 15));
}

    public void OpenYearDropdownAndSelect2016()
    {
        #region Variable Declarations
        HtmlHyperlink uIItem2017Hyperlink = this.UIFeeInternetExplorerWindow.UIFeeDocument.UIItem2017YearYearPane.UIItem2017Hyperlink;
        HtmlDiv uIItem2016Pane = this.UIFeeInternetExplorerWindow.UIFeeDocument.UIItem2016Pane;
        #endregion

        // Click '2017' link
        Mouse.Click(uIItem2017Hyperlink, new Point(149, 20));

        // Click '2016' pane
        Mouse.Click(uIItem2016Pane, new Point(124, 3));
    }

    public void Type1234InCheckNumber()
    {
        #region Variable Declarations
        HtmlEdit uICheckNumberEdit = this.UIFeeInternetExplorerWindow.UIFeeDocument1.UICheckNumberEdit;
        #endregion

        // Type '1234' in 'Check Number' text box
        uICheckNumberEdit.Text = this.Type1234InCheckNumberParams.UICheckNumberEditText;
    }

。 。 。等等,直到你到达。 。

public void ClickSubmitButton()
{
    #region Variable Declarations
    HtmlInputButton uISubmitButton = this.UIFeeInternetExplorerWindow.UIFeeDocument1.UISubmitButton;
    #endregion

    // Click 'Submit' button
    Mouse.Click(uISubmitButton, new Point(27, 17));
}

我只用了一年多时间做C#MSTEST Coded UI,但我在这里有三个其他的自动机,比我有更多的经验,这个问题对我们所有人来说都是新的。我们看到了我们能想到的一切,但没有快乐。有没有人见过这个?是什么导致这种行为?最重要的是,有没有修复?

1 个答案:

答案 0 :(得分:2)

因为您提到您认为JS可能已损坏,这使我相信在单击按钮后可能会在后台进行某种类型的AJAX。如果是这种情况,请参阅this question,了解它是否适​​用于您的案例。