Ruby 在Capybara Webkit测试中将Ctrl-S发送到浏览器
我的应用程序中有JavaScript,当用户点击Ctrl-S或Cmd-S时提交表单。我想使用RSpec、Capybara和Capybara Webkit为此编写一个自动测试。我不认为我可以让Capybara执行JavaScript来触发Ctrl-S/Cmd-S,因为在Chrome中JavaScript通常不允许这样做,因为这是一个安全问题。我看到有Ruby 在Capybara Webkit测试中将Ctrl-S发送到浏览器,ruby,testing,rspec,webkit,capybara,Ruby,Testing,Rspec,Webkit,Capybara,我的应用程序中有JavaScript,当用户点击Ctrl-S或Cmd-S时提交表单。我想使用RSpec、Capybara和Capybara Webkit为此编写一个自动测试。我不认为我可以让Capybara执行JavaScript来触发Ctrl-S/Cmd-S,因为在Chrome中JavaScript通常不允许这样做,因为这是一个安全问题。我看到有page.driver.browser.action.key\u down/key\u up方法可用。水豚网络工具包有什么相似之处吗?如果没有,我如何
page.driver.browser.action.key\u down
/key\u up
方法可用。水豚网络工具包有什么相似之处吗?如果没有,我如何在测试中将Ctrl-S和Cmd-S发送到浏览器
编辑:我也无法在Firefox中使用常规的Selenium驱动程序:
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\u down(:control).send\u keys('s').key\u up(:control).perform没有做任何事情--页面在Firefox中加载,只是放在那里。这是在OS X上的Firefox 19和selenium webdriver 2.35.1上实现的
关于如何在Firefox或Chrome中使用Selenium或Capybara Webkit实现这一点,您有什么建议吗?我正在尝试使用Capybara和SitePrism在Chrome中实现类似的功能。但这在Firefox中对我来说确实有效:
page.element.native.send_keys :command, 'a'
所以我建议试试这个
builder.native.send_keys :control, 's'
顺便说一句,我要测试的JavaScript确实有效。当Selenium打开Firefox时,如果我等待一秒钟并亲自点击Ctrl-S,表单将按预期提交,测试通过。