单元测试-C#MSTEST编码的UI自动测试失败,而相同的手动测试通过
本文关键字:测试 编码 -C#MSTEST UI 自动测试 单元测试 失败 | 更新日期: 2023-09-27 17:59:57
我在谷歌上搜索过,Binged,Yahoo’d,甚至Dogspied。我发现大部分Python、PHP和Ruby都不适用。只有一个项目出现(2012年),但没有答案:单元测试在r#中失败,但在mstest 中通过
我有两项测试与记录完全一样。首先,当测试到达"提交"按钮时,应用程序会说页面还没有准备好提交,"提交"键仍处于禁用状态。对于另一个,"提交"按钮处于启用状态,但页面什么也不做。当我用相同的数据(或不同的数据)手动(使用键盘和鼠标)运行完全相同的操作时,两个页面上的"提交"按钮都会工作,并且两个页面都会处理。
我已经将测试运行到单击Submit按钮的程度,但手动单击它们时也不会发生任何事情。我从一个字段跳到下一个字段,认为这可能是一个没有触发的事件,但没有。
以下是我的发现:如果自动化打开页面,"提交"按钮将不起作用。如果页面上的一个项目被自动化输入或选择,"提交"按钮将不起作用。但是:如果我在页面打开之前运行自动化,那么如果我点击打开页面并手动用键盘和鼠标输入条目,然后手动用鼠标点击提交按钮,它就会工作。
测试记录在MTM中,并导入到Visual Studio 2012中。我尝试过重新导入它们,并使用Visual Studio手动录制了这些步骤。
我们现在认为测试软件(MSTest)和页面中的JavaScript之间存在一些意想不到的交互。我们已经对应用程序中的其他11个页面进行了编码。所有11个应用程序页面都使用相同的基本架构和相同的控件。我们测试人员认为JavaScript可能已损坏(缺少大括号、缺少一对括号、缺少分号、换行错误等等)。
这些测试绝对没有什么独特之处。它们是我编写过的最简单的测试之一。其中一个只有四个输入字段。我没有手动编码;UIMap.cs文件为空。这一切都在UIMap中。基于UIMap的Designer.cs。UITest文件。
以下是我的编码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编码UI才一年多,但我这里还有另外三个自动化程序,它们的经验比我丰富得多,这个问题对我们来说都是新问题。我们看到了我们能想到的一切,但没有快乐。有人看到这个吗?是什么导致了这种行为?最重要的是,有解决方案吗?
因为你提到你认为JS可能坏了,这让我相信,点击按钮后,后台可能正在进行某种AJAX。如果是这样的话,请看这个问题,看看它是否适用于你的情况。