模拟全局键盘快捷键以在 travis-ci 和 appveyor 中测试 Electron 应用程序

Simulating global keyboard shortcuts to test an Electron app in travis-ci and appveyor

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

我需要模拟全局快捷键 Ctrl + X⌘ + X on Mac)。 Spectron 不提供模拟按键的功能。因此我尝试使用 RobotJS,但很难让它在 travis 和 appveyor 上可靠地构建。我也试过 node-key-sender,它适用于 windows 和 linux,但我无法让它按下 键。我试过在 node-key-sender 中使用字符串 'command''meta' 但没有成功。

这个问题是否有在 travis-ci 和 appveyor 上可靠工作的解决方案?

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

您是否尝试过使用按下和按下按键事件自己发送键码?

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

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

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

看看这个 w3 key press tool 并自己尝试一下,看看您发送的 key-event/key-code 组合是否正确。

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

在回复我的评论时,您可以测试一下 travis-ci 是否受此映射更改的影响,如果是,则在 Macs 上切换 control/command 键很常见足以让我怀疑有一个 travis-ci 设置来指示此切换。如果有效,更改将消除在测试中发送控制键时对系统相关代码的需求。

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

More reading on javascript key events