1

我正在尝试在我的网站上测试一些热键。在字段中键入 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 ...}

我错过了什么?

4

1 回答 1

0

你有几件事我会在这里建议。

第一个与您CTRLpressKeys方法中的使用有关。查看 Leadfoot 文档:

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

CTRL 键是通过使用引用的keys.CONTROL

我会提出的另一个建议(基于我自己使用 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
  }
]

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

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

于 2018-01-09T07:27:05.610 回答