我刚刚开始编写一些编码的 ui 测试,当我尝试在文本框中输入一个值时,我在播放过程中遇到了问题,该文本框通过 javaScript 函数仅限于数字(十进制)值。我已将该脚本确定为“罪魁祸首”,因为测试在禁用该脚本时成功运行。
我在测试中输入的值根据函数的约束是合法的,所以我不明白为什么当测试运行者输入它时会抛出异常。任何人都可以提供任何见解吗? javascript 函数似乎可以满足我们的目的,因此为了使自动化测试正常工作而必须删除它似乎很不幸。
以下是更多详细信息:
我的测试相当简单。我找到了 2 个文本框控件,并验证当第一个文本框控件缺少值时是否显示正确的验证消息。设置 OrderIdTextBox.Text 有效,但设置 AmountTextBox.Text 会引发异常(当启用下面的 js 函数时):
[TestMethod]
public void Should_show_validation_error_if_orderId_is_missing()
{
_page.OrderIdTextBox.Text = "";
if (_page.AmountTextBox.Exists)
{
_page.AmountTextBox.Text = "10.00";
}
Mouse.Click(SubmitButton);
Assert.AreEqual(true, _page.OrderIdValidationSpan.Exists);
}
这是页面上的 javascript,它过滤掉不可接受的击键:
$(document).on('keydown', ".number", function (event) {
// Allow: backspace, delete, tab, escape, enter, and decimal
if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || event.keyCode == 110 || event.keyCode == 190 ||
// Allow: Ctrl+A
(event.keyCode == 65 && event.ctrlKey === true) ||
// Allow: home, end, left, right
(event.keyCode >= 35 && event.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
else {
// Ensure that it is a number and stop the keypress
if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
event.preventDefault();
}
}
});
这是当我的测试尝试在播放期间设置 AmountTextBox 值时引发的异常。
Test method (namespace snipped).Should_show_validation_error_if_orderId_is_missing threw exception:
Microsoft.VisualStudio.TestTools.UITest.Extension.PlaybackFailureException: Cannot perform 'SetProperty of Text with value "10.00"' on the control. Additional Details:
TechnologyName: 'Web'
ControlType: 'Edit'
Id: 'Amount'
Name: 'Amount'
TagName: 'INPUT'
---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0xF004F006