【问题标题】:Simulating hotkeys in Intern (3) functional tests模拟实习生(3)功能测试中的热键
【发布时间】:2018-01-08 18:34:59
【问题描述】:

我正在尝试在我的网站上测试一些热键。在字段中键入 Ctrl+5 应该会有所作为。我在做:

command.get(...)
    ...
    .findByCssSelector('input')
    .click()
    .pressKeys([keys.CONTROL, '5'])
    .pressKeys(keys.NULL)
    .end()

似乎在 IE 中给了我奇怪的结果。在我的 keydown 处理程序中,我正在记录事件并得到以下信息:

{altKey: false, bubbles: true, button: undefined, buttons: undefined, cancelable: true, changedTouches: undefined, char: "", charCode: 0, clientX: undefined, clientY: undefined, ctrlKey: false, currentTarget: HTMLInputElement {...}, data: undefined, delegateTarget: HTMLInputElement {...}, detail: 0, eventPhase: 2, handleObj: Object {...}, isSimulated: false, jQuery311042854121322469546: true, key: "Control", keyCode: 17 ...}
{altKey: false, bubbles: true, button: undefined, buttons: undefined, cancelable: true, changedTouches: undefined, char: "", charCode: 0, clientX: undefined, clientY: undefined, ctrlKey: false, currentTarget: HTMLInputElement {...}, data: undefined, delegateTarget: HTMLInputElement {...}, detail: 0, eventPhase: 2, handleObj: Object {...}, isSimulated: false, jQuery311042854121322469546: true, key: "5", keyCode: 53 ...}

注意 ctrlKey 是假的,所以它没有执行我的热键。这是我在手动输入 Ctrl + 5 时得到的:

{altKey: false, bubbles: true, button: undefined, buttons: undefined, cancelable: true, changedTouches: undefined, char: "", charCode: 0, clientX: undefined, clientY: undefined, ctrlKey: true, currentTarget: HTMLInputElement {...}, data: undefined, delegateTarget: HTMLInputElement {...}, detail: 0, eventPhase: 2, handleObj: Object {...}, isSimulated: false, jQuery311042854121322469546: true, key: "Control", keyCode: 17 ...}
{altKey: false, bubbles: true, button: undefined, buttons: undefined, cancelable: true, changedTouches: undefined, char: "", charCode: 0, clientX: undefined, clientY: undefined, ctrlKey: true, currentTarget: HTMLInputElement {...}, data: undefined, delegateTarget: HTMLInputElement {...}, detail: 0, eventPhase: 2, handleObj: Object {...}, isSimulated: false, jQuery311042854121322469546: true, key: "5", keyCode: 53 ...}

我错过了什么?

【问题讨论】:

    标签: functional-testing intern leadfoot


    【解决方案1】:

    你有一些我想在这里提出的建议。

    第一个与您在 pressKeys 方法中使用 CTRL 有关。查看 Leadfoot 文档:

    https://theintern.io/leadfoot/module-leadfoot_keys.html

    使用keys.CONTROL 引用CTRL 键。

    我会提出的另一个建议(基于我自己使用 Intern 的经验)是您应该将所有按键都包含在一个数组中。现在你有如下两行:

    .pressKeys([keys.CTRL, '5'])
    .pressKeys(keys.NULL)
    

    我发现你需要将所有这些都包含在一个数组中,例如:

    .pressKeys([keys.CONTROL, '5', keys.NULL])
    

    应该注意,有些人有单独的pressKeys 事件,它似乎对他们有用。对我来说,当我想做这样的键盘快捷键时,我永远无法让它工作。

    除此之外,另一个建议的按键数组如下 - 这将按下您想要的两个键,然后再次释放它们:

    .pressKeys([keys.CONTROL, '5', '5', keys.CONTROL)
    

    更新 1:

    您应该注意的一件事(这是最近影响到我的事情,这就是为什么我说我会在这里建议它,而我还记得它)是确保您的 capabilities 设置为确保键盘事件支持。有几种方法可以做到这一点。

    首先,您可以设置一个全局capabilities设置如下:

    "capabilities": {
      ...
      "fixSessionCapabilities": true
    }
    

    这将在运行任何测试之前自动解决环境中的许多问题。但是我发现,在全局范围内将此设置用作 true 可能会导致您的环境出现其他不需要的行为,因此另一种替代方法是根据需要在单个环境中设置您需要的内容。

    例如,您的键盘事件似乎不起作用,因此您可以要求您的配置在 IE 测试运行时尝试更正此问题,如下所示:

    "environments": [
      ...
      {
        "browserName": "internet explorer",
        "brokenSendKeys": true
      }
    ]
    

    如果您想查看和尝试任何其他类似的潜在设置,您可以在 Leadfoot 文档的 Globals 部分找到它们,如下所示:

    https://theintern.io/leadfoot/global.html

    【讨论】:

    • 糟糕,我实际上在使用 keys.CONTROL,我只是在 OP 中打错字了。
    • 我刚刚更新了我的评论,为您提供了另一个建议。不知道你是否还有这个问题,所以说我会分享这个以防万一。希望对您有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 2015-12-30
    • 2016-02-11
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多