C# MSTEST 编码 UI 自动测试失败,而相同的手动测试通过
C# MSTEST Coded UI Automated Test Fails While Identical Manual Test Passes
我在 Google 上搜索过、Binged 过、Yahood 过,甚至 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.Designer.cs 中,基于 UIMap.UITest 文件。
这是我的编码 UI 测试 Class 的重要部分(省略了变量设置和 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,但我这里还有其他三个自动化人员,他们的经验比我多得多,这个问题对我们所有人来说都是新问题。我们已经看过我们能想到的一切,但没有快乐。有人见过这个吗?是什么导致了这种行为?最重要的是,有解决办法吗?
因为您提到您认为 JS 可能已损坏,这让我相信点击按钮后可能在后台发生某种 AJAX。如果是这种情况,请参阅 this question 以了解它是否适用于您的情况。
我在 Google 上搜索过、Binged 过、Yahood 过,甚至 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.Designer.cs 中,基于 UIMap.UITest 文件。
这是我的编码 UI 测试 Class 的重要部分(省略了变量设置和 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,但我这里还有其他三个自动化人员,他们的经验比我多得多,这个问题对我们所有人来说都是新问题。我们已经看过我们能想到的一切,但没有快乐。有人见过这个吗?是什么导致了这种行为?最重要的是,有解决办法吗?
因为您提到您认为 JS 可能已损坏,这让我相信点击按钮后可能在后台发生某种 AJAX。如果是这种情况,请参阅 this question 以了解它是否适用于您的情况。