在Intern(3)功能测试中模拟热键

时间:2018-01-08 18:35:00

标签: functional-testing intern leadfoot

我试图在我的网站上测试一些热键。在字段中键入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为false,因此它没有执行我的热键。这是我手动输入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 ...}

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我会在这里提出一些建议。

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

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

使用keys.CONTROL引用CTRL键。

我将拥有的另一个建议(根据我自己使用实习生的经验)是你应该在一个数组中包含所有按键。现在你有两行如下:

.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