在Capybara Webkit测试中将Ctrl-S发送到浏览器

时间:2013-10-10 15:23:49

标签: ruby testing rspec webkit capybara

我的应用程序中有JavaScript,当用户按Ctrl-S或Cmd-S时会提交表单。我想使用RSpec,Capybara和Capybara Webkit为此编写一个自动化测试。我认为我不能让Capybara执行JavaScript来触发Ctrl-S / Cmd-S,因为Chrome中的JavaScript通常不允许作为安全问题。我看到Seleniumpage.driver.browser.action.key_down / key_up方法可用。与Capybara Webkit有什么相似之处吗?如果没有,我如何在测试中将Ctrl-S和Cmd-S发送到浏览器?

编辑:我也无法使用常规的Selenium驱动程序与Firefox一起工作:

describe 'edit a template and hit Ctrl-S', js: true do
  render_views

  it 'saves the template' do
    visit my_path
    page.execute_script("$('#hidden_textarea').val('Fabulous new content')")
    builder = page.driver.browser.action
    builder.key_down(:control).send_keys('s').key_up(:control).perform
    expect(page).to have_text('Record was saved.')
    expect(page).to have_text('Fabulous new content')
  end
end

看起来builder.key_down(:control).send_keys('s').key_up(:control).perform没有做任何事情 - 页面在Firefox中加载但只是坐在那里。这是OS X上的Firefox 19和selenium-webdriver 2.35.1。

有关如何使用Selenium或Capybara Webkit在Firefox或Chrome中实现此功能的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我尝试使用Capybara和SitePrism在Chrome中做类似的事情。这实际上适用于我在Firefox中:

page.element.native.send_keys :command, 'a'

所以我建议尝试这个

builder.native.send_keys :control, 's'