编码UI回放-在特定文本框中输入文本时引发错误(带javaScript过滤按键)
我刚刚开始编写一些编码的ui测试,当我试图通过javaScript函数将值输入到文本框中时,我在播放过程中遇到了一个问题,该文本框仅限于数字十进制值。我已经确定脚本是罪魁祸首,因为当它被禁用时,测试会成功运行 根据函数的约束条件,我在测试中输入的值是合法的,因此我不理解为什么在测试运行程序输入异常时抛出异常。有人能提供一些见解吗?javascript函数似乎适合我们的目的,因此,为了使自动化测试能够工作而不得不删除它似乎是不幸的 以下是一些更详细的信息: 我的测试相当直接。我正在查找2个textbox控件,并验证当第一个控件中缺少值时是否显示正确的验证消息。设置OrderIdTextBox.Text可以工作,但设置AmountTextBox.Text会在启用下面的js函数时引发异常:编码UI回放-在特定文本框中输入文本时引发错误(带javaScript过滤按键),javascript,.net,coded-ui-tests,Javascript,.net,Coded Ui Tests,我刚刚开始编写一些编码的ui测试,当我试图通过javaScript函数将值输入到文本框中时,我在播放过程中遇到了一个问题,该文本框仅限于数字十进制值。我已经确定脚本是罪魁祸首,因为当它被禁用时,测试会成功运行 根据函数的约束条件,我在测试中输入的值是合法的,因此我不理解为什么在测试运行程序输入异常时抛出异常。有人能提供一些见解吗?javascript函数似乎适合我们的目的,因此,为了使自动化测试能够工作而不得不删除它似乎是不幸的 以下是一些更详细的信息: 我的测试相当直接。我正在查找2个text
[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();
}
}
});
试一试
这个类似的问题引出了一个go4answers主题,提出了上述建议
默认情况下,回放将键作为Unicode发送到任何应用程序。可能需要将密钥作为扫描码发送到某些应用程序。我们可以通过使用一个超负荷的Keyboard.Sendkeys函数来实现这一点
从尝试
这个类似的问题引出了一个go4answers主题,提出了上述建议
默认情况下,回放将键作为Unicode发送到任何应用程序。可能需要将密钥作为扫描码发送到某些应用程序。我们可以通过使用一个超负荷的Keyboard.Sendkeys函数来实现这一点
在中,您还可以尝试:
if (_page.AmountTextBox.Exists)
{
Mouse.Click(_page.AmountTextBox);
Keyboard.Sendkeys("10.00");
}
您也可以尝试:
if (_page.AmountTextBox.Exists)
{
Mouse.Click(_page.AmountTextBox);
Keyboard.Sendkeys("10.00");
}
谢谢你的建议。当我进行此更改时,文本框仍然仅使用禁用脚本函数时发送的值进行更新。不过,有趣的是,启用脚本时并没有抛出异常;关键点似乎没有通过脚本的过滤器。很有趣!基达的建议奏效了吗?甚至可能是两者的组合。我不会删除javascript,但也许它可以以不同的方式处理键值?虽然我比javascript更了解编码ui。基达的解决方案确实有效,从我从他的解释中收集到的信息来看,这也许可以解释为什么这个方案不起作用。如果通过文本发送相同的默认unicode值=。。。操作也通过SendKeys操作发送,我想这可以解释为什么发送的字符串从未出现在我的文本框中。我对此进行了更多的研究,并且键盘中有一个重载。SendKeys方法包含一个isUnicode参数。当我将其设置为false时,您的建议满足了我的需要。啊,我知道有过载,但找不到文档,所以我怀疑自己!很高兴你找到了!谢谢你的建议。当我进行此更改时,文本框仍然仅使用禁用脚本函数时发送的值进行更新。不过,有趣的是,启用脚本时并没有抛出异常;关键点似乎没有通过脚本的过滤器。很有趣!基达的建议奏效了吗?甚至可能是两者的组合。我不会删除javascript,但也许它可以以不同的方式处理键值?虽然我比javascript更了解编码ui。基达的解决方案确实有效,从我从他的解释中收集到的信息来看,这也许可以解释为什么这个方案不起作用。如果通过文本发送相同的默认unicode值=。。。操作也通过SendKeys操作发送,我想这可以解释为什么发送的字符串从未出现在我的文本框中。我对此进行了更多的研究,并且键盘中有一个重载。SendKeys方法包含一个isUnicode参数。当我将其设置为false时,您的建议满足了我的需要。啊,我知道有过载,但找不到文档,所以我怀疑自己!很高兴你找到了!
if (_page.AmountTextBox.Exists)
{
Mouse.Click(_page.AmountTextBox);
Keyboard.Sendkeys("10.00");
}