1

我正在尝试使用 Spectron 对我的 Electron 应用程序进行端到端测试。我需要这些测试才能在 travis-ci(linux 和 mac)和 appveyor(windows)上工作。

我需要模拟全局快捷方式Ctrl + X⌘ + X在 Mac 上)。Spectron 不提供模拟按键的功能。因此我尝试使用RobotJS,但很难让它在 travis 和 appveyor 上可靠地构建。我也试过node-key-sender了,它适用于 windows 和 linux,但我无法让它按下⌘</kbd> key. I've tried using the string 'command' and 'meta' in node-key-sender with no success.

这个问题有没有可以在 travis-ci 和 appveyor 上可靠运行的解决方案?

注意:跳过模拟他们的按键完全不是和选项。我正在尝试使用 Spectron 编写端到端测试,并且无法直接从 Spectron 调用应用程序中的函数。

4

1 回答 1

1

您是否尝试过使用 key-down 和 key-up 事件自己发送键码?

要使用 node-key-sender 执行此操作,您似乎可以使用batchTypeKey方法(可能还有其他方法也采用事件类型,我不确定)

使用 node-key-sender 发送文本将发送取决于调用者的键盘布局配置的键码,可以在 node-key-sender 中手动设置。

键盘事件的解释可能因键盘、其驱动程序和操作系统而异,因此您需要知道您的应用程序究竟期望什么。

看看这个w3 按键工具并自己尝试一下,看看您是否发送了正确的按键事件/按键代码组合。

在我的 Mac 上,使用上述工具,左侧命令键显示为生成键码为 91 且元数据设置为 true 的键按下事件,然后是键码为 91 的键按下事件。相比之下,打开括号键显示为生成一个按键,然后是按键,然后是按键,使用键码 91 表示按键事件,使用键码 219 表示按键向下/向上事件。(注意:我的猜测是只有按键按下/向上事件来自键盘,并且 Safari 本身在按键和按键事件之间生成按键事件,但我不是 100%在那)

在回复我的评论时,您可以测试 travis-ci 是否受此映射更改的影响,如果在 Mac 上切换控制/命令键很常见,我会怀疑存在 travis-ci 设置来指示此开关. 如果可行,则在测试中发送控制键时,更改将消除对系统相关代码的需求。

就我个人而言,我宁愿抽象发送一个控制键并使其具有上下文和系统意识,而不是在我的 Mac OS 中重新映射命令键,原因是如果你有其他与 Mac OS 交互的应用程序(例如 travis-ci)那么您不必担心映射更改会影响它们。

更多关于 javascript 关键事件的阅读

于 2019-11-18T19:38:11.263 回答