我试图在我的网站上测试一些热键。在字段中键入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 ...}
我错过了什么?
答案 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
部分找到它们,如下所示: