我用谷歌搜索和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,但我在这里有三个其他的自动机,比我有更多的经验,这个问题对我们所有人来说都是新的。我们看到了我们能想到的一切,但没有快乐。有没有人见过这个?是什么导致这种行为?最重要的是,有没有修复?
答案 0 :(得分:2)
因为您提到您认为JS可能已损坏,这使我相信在单击按钮后可能会在后台进行某种类型的AJAX。如果是这种情况,请参阅this question,了解它是否适用于您的案例。