Capybara / Webkit:'keypress'与'keydown'

时间:2013-09-05 20:19:01

标签: jquery capybara capybara-webkit

在我的Rails应用程序中,我使用此jQuery来防止在用户在输入字段中按下“enter”时提交表单:

$('input').on('keydown', function(e) {
  if(e.which == '13') {
    return false;
  }
})

我在Capybara写了一个测试,以确保表单没有被提交(更多关于here),并且有一段时间让测试正常工作。最后我发现jQuery函数必须定位keydown事件,而不是keypress。它现在非常好用。

这让我有点不舒服,因为我知道keypress应该也能正常工作,而且我知道它实际上可以通过在浏览器中手动尝试来实现。但是,如果我想对此行为进行有效测试,我必须使用keydown

这是我在集成测试中发送给Webkit的命令:

page.driver.browser.execute_script "var e = jQuery.Event('keydown'); e.which = 13; $('#shift_employee').trigger( e );"

不言而喻,当我更改jQuery函数来处理keypress而不是keydown时,我还更改上面的Ruby行来触发keypress事件而不是keydown事件1}}事件。但是除非我使用keydown,否则测试会失败。

那是什么交易?这是一个Webkit问题吗?我是否应该担心,只要测试工作且表格没有提交?

1 个答案:

答案 0 :(得分:0)

我相信你过分思考这个问题。表单在enter上提交,因为您在表单中有一个提交按钮。因此,如果您不想要这种行为,则可以使用以下选项:

从表单中删除提交按钮。如果您需要其他操作的按钮,则可以创建一个看似按钮的非提交元素,并在单击时触发submit()