javascript - 编码 UI 播放 - 在特定文本框中输入文本时抛出错误(使用 javaScript 过滤击键)

标签 javascript .net coded-ui-tests

我刚刚开始编写一些编码的 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,它过滤掉 Not Acceptable 击键:

$(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

最佳答案

尝试

Playback.PlaybackSettings.SendKeysAsScanCode = true;

这个类似的问题 ( https://stackoverflow.com/questions/16239673/exception-from-hresult-0xf004f006 ) 引出了一个 go4answers 主题,该主题提出了上述建议。

“默认情况下,播放会将按键以 Unicode 形式发送到任何应用程序。可能需要将按键作为扫描码发送到某些应用程序。我们可以通过使用 Keyboard.Sendkeys 函数的重载来实现此目的。”

来自http://blogs.msdn.com/b/vstsqualitytools/archive/2010/04/13/uitest-framework-in-visual-studio-2010-part-2.aspx

关于javascript - 编码 UI 播放 - 在特定文本框中输入文本时抛出错误(使用 javaScript 过滤击键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20669099/

相关文章:

.net - = 和 := 有什么区别

javascript - 使用javascript获取国家代码

c# - .NET 中的 GO 语句炸毁了 sql 执行

javascript - 在 python3 中使用 webbrowser 播放 YouTube 视频

c# - 从 WSDL (.NET) 生成 SOAP 请求

c# - 编码的 UI WebTest,有时在编辑字段中省略键入的字符

azure - 如何针对 Windows Azure SDK v1.4 运行编码的 UI 测试

c# - CodedUI 测试未在测试 Controller /代理上运行

javascript - 如何在reactJS中的setState中传递.JSON

javascript - 使用 ajax 获取 JSON 数据时,我收到意外的 token : error